diff --git a/ANIM.SKI b/ANIM.SKI new file mode 100644 index 0000000..d919f69 Binary files /dev/null and b/ANIM.SKI differ diff --git a/BACK0.PCX b/BACK0.PCX new file mode 100644 index 0000000..7aac9dd Binary files /dev/null and b/BACK0.PCX differ diff --git a/BACK1.PCX b/BACK1.PCX new file mode 100644 index 0000000..98b2e79 Binary files /dev/null and b/BACK1.PCX differ diff --git a/BACK2.PCX b/BACK2.PCX new file mode 100644 index 0000000..cf097ef Binary files /dev/null and b/BACK2.PCX differ diff --git a/BACK3.PCX b/BACK3.PCX new file mode 100644 index 0000000..97b6108 Binary files /dev/null and b/BACK3.PCX differ diff --git a/BACK4.PCX b/BACK4.PCX new file mode 100644 index 0000000..efeaced Binary files /dev/null and b/BACK4.PCX differ diff --git a/COMP.BAT b/COMP.BAT new file mode 100644 index 0000000..bf96776 --- /dev/null +++ b/COMP.BAT @@ -0,0 +1,5 @@ +SET PATH=%BP_PATH%\BIN;%PATH% + +BINOBJ.EXE %BP_PATH%\BGI\EGAVGA.BGI EGAVGA.OBJ EGAVGADriverProc +TASM.EXE MAKILOW.ASM +BPC.EXE -B -CP -$E- -$G+ -$N+ -$D- -$L- -$Y- -$M49152,0,655360 SJ3.PAS diff --git a/CONFIG.SKI b/CONFIG.SKI new file mode 100644 index 0000000..dbd075d --- /dev/null +++ b/CONFIG.SKI @@ -0,0 +1,39 @@ +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +255 +0 +0 +TEMP +0 +240 +0 +0 +0 +1 +A TEAM +1 +1 +0 +2 +1 +0 +1 +1 +72 +77 +75 +21524 +21011 +1 +0 +0 diff --git a/COVER.PNG b/COVER.PNG new file mode 100644 index 0000000..055b00a Binary files /dev/null and b/COVER.PNG differ diff --git a/FRONT1.PCX b/FRONT1.PCX new file mode 100644 index 0000000..4f180c8 Binary files /dev/null and b/FRONT1.PCX differ diff --git a/FRONT10.PCX b/FRONT10.PCX new file mode 100644 index 0000000..c8db9a6 Binary files /dev/null and b/FRONT10.PCX differ diff --git a/FRONT11.PCX b/FRONT11.PCX new file mode 100644 index 0000000..1985f59 Binary files /dev/null and b/FRONT11.PCX differ diff --git a/FRONT12.PCX b/FRONT12.PCX new file mode 100644 index 0000000..8abccbe Binary files /dev/null and b/FRONT12.PCX differ diff --git a/FRONT13.PCX b/FRONT13.PCX new file mode 100644 index 0000000..d91af6c Binary files /dev/null and b/FRONT13.PCX differ diff --git a/FRONT14.PCX b/FRONT14.PCX new file mode 100644 index 0000000..811ce9c Binary files /dev/null and b/FRONT14.PCX differ diff --git a/FRONT15.PCX b/FRONT15.PCX new file mode 100644 index 0000000..14b0b38 Binary files /dev/null and b/FRONT15.PCX differ diff --git a/FRONT16.PCX b/FRONT16.PCX new file mode 100644 index 0000000..9bab07b Binary files /dev/null and b/FRONT16.PCX differ diff --git a/FRONT17.PCX b/FRONT17.PCX new file mode 100644 index 0000000..d09c295 Binary files /dev/null and b/FRONT17.PCX differ diff --git a/FRONT18.PCX b/FRONT18.PCX new file mode 100644 index 0000000..7234b39 Binary files /dev/null and b/FRONT18.PCX differ diff --git a/FRONT19.PCX b/FRONT19.PCX new file mode 100644 index 0000000..6655e6e Binary files /dev/null and b/FRONT19.PCX differ diff --git a/FRONT2.PCX b/FRONT2.PCX new file mode 100644 index 0000000..600162b Binary files /dev/null and b/FRONT2.PCX differ diff --git a/FRONT20.PCX b/FRONT20.PCX new file mode 100644 index 0000000..876059c Binary files /dev/null and b/FRONT20.PCX differ diff --git a/FRONT3.PCX b/FRONT3.PCX new file mode 100644 index 0000000..feffc62 Binary files /dev/null and b/FRONT3.PCX differ diff --git a/FRONT4.PCX b/FRONT4.PCX new file mode 100644 index 0000000..c4d9f3d Binary files /dev/null and b/FRONT4.PCX differ diff --git a/FRONT5.PCX b/FRONT5.PCX new file mode 100644 index 0000000..1545fc6 Binary files /dev/null and b/FRONT5.PCX differ diff --git a/FRONT6.PCX b/FRONT6.PCX new file mode 100644 index 0000000..c79304c Binary files /dev/null and b/FRONT6.PCX differ diff --git a/FRONT7.PCX b/FRONT7.PCX new file mode 100644 index 0000000..1764f12 Binary files /dev/null and b/FRONT7.PCX differ diff --git a/FRONT8.PCX b/FRONT8.PCX new file mode 100644 index 0000000..39aa29c Binary files /dev/null and b/FRONT8.PCX differ diff --git a/FRONT9.PCX b/FRONT9.PCX new file mode 100644 index 0000000..5f27dcd Binary files /dev/null and b/FRONT9.PCX differ diff --git a/GOALS.SKI b/GOALS.SKI new file mode 100644 index 0000000..06abe09 --- /dev/null +++ b/GOALS.SKI @@ -0,0 +1,20 @@ +1325 +1070 +2095 +1360 +1465 +1095 +1450 +1075 +1395 +1370 +1300 +1445 +2170 +1315 +815 +1445 +1085 +1395 +2265 +1365 diff --git a/HILLBASE.SKI b/HILLBASE.SKI new file mode 100644 index 0000000..0dd930d --- /dev/null +++ b/HILLBASE.SKI @@ -0,0 +1,262 @@ +-HILLBASE.SKI- DO NOT ATTEMPT TO EDIT THIS FILE! +*A +kuopio +120 +1 +0 +90 +0 +148 +89 +3217 +SJ v3.00 Original +932638 +1009542 +*B +lahti +90 +2 +4 +90 +0 +131 +84 +3222 +SJ v3.00 Original +923959 +981345 +*C +Vikersund +175 +3 +1 +90 +0 +159 +108 +3211 +SJ v3.00 Original +916011 +1088698 +*D +Falun +115 +4 +3 +90 +0 +147 +86 +3205 +SJ v3.00 Original +954486 +960805 +*E +Lillehammer +120 +5 +2 +90 +0 +155 +90 +3212 +SJ v3.00 Original +952014 +868839 +*F +Chamonix +95 +6 +1 +95 +0 +128 +87 +3211 +SJ v3.00 Original +956482 +985955 +*G +Engelberg +120 +7 +3 +90 +0 +150 +90 +3219 +SJ v3.00 Original +936772 +999462 +*H +Ramsau +90 +8 +0 +85 +0 +128 +83 +3214 +SJ v3.00 Original +918497 +1159969 +*I +Oberstdorf +115 +9 +2 +90 +0 +146 +89 +3216 +SJ v3.00 Original +955456 +1018993 +*J +Garmich-Partenkirchen +115 +10 +3 +95 +0 +147 +86 +3209 +SJ v3.00 Original +960369 +969036 +*K +Innsbruck +110 +11 +4 +85 +0 +140 +90 +3221 +SJ v3.00 Original +937490 +955666 +*L +Bischofshofen +120 +12 +0 +85 +0 +145 +91 +3209 +SJ v3.00 Original +946238 +951013 +*M +Harrachov +180 +13 +3 +90 +0 +166 +106 +3221 +SJ v3.00 Original +982550 +929040 +*N +Holmenkollen +112 +14 +1 +85 +0 +146 +85 +3221 +SJ v3.00 Original +962922 +973389 +*O +otep„„ +70 +15 +0 +90 +0 +122 +74 +3229 +SJ v3.00 Original +928219 +946709 +*P +Sapporo +120 +16 +4 +95 +1 +151 +88 +3220 +SJ v3.00 Original +980863 +968691 +*Q +Hakuba +90 +17 +3 +90 +0 +133 +85 +3223 +SJ v3.00 Original +955450 +984193 +*R +Pine Mountain +120 +18 +4 +85 +0 +159 +87 +3218 +SJ v3.00 Original +899495 +837382 +*S +Planica +185 +19 +2 +90 +0 +169 +106 +3208 +SJ v3.00 Original +965494 +981362 +*T +Zakopane +116 +20 +4 +90 +0 +149 +85 +3210 +SJ v3.00 Original +968864 +973440 +*** End of Base File *** diff --git a/HISCORE.SKI b/HISCORE.SKI new file mode 100644 index 0000000..67c7629 --- /dev/null +++ b/HISCORE.SKI @@ -0,0 +1,229 @@ +HISCORE.SKI - !!! DO NOT ATTEMPT TO EDIT THIS FILE !!! +Roar Lj›kels›y˙ +FDNEIEEE +JHNFDJFE +Roar Lj›kels›y˙ +FDQEFEEE +HRQIHHFE +Sigurd Pettersen˙ +GJPEDEEE +GDPFGGFE +Janne Ahonen˙ +HHSEGEEE +FJSEDFFE +Adam Malysz˙ +INREHEEE +NLRNFNEE +Tami Kiuru˙ +JLBEFEEE +MRBMFMEE +Martin H”llwarth˙ +KRAEEEEE +LFALDLEE +Sven Hannawald˙ +LFDEDEEE +JFDKGKEE +Veli-Matti Lindstr”m˙ +MDCEFEEE +JJCJIJEE +Matti Hautam„ki˙ +EHFFGEEE +INFNGIEE +Michael Uhrmann˙ +GLEFGEEE +IHEIDIEE +Thomas Morgenstern˙ +IFHFEEEE +HLHMDHEE +Peter Zonta˙ +KJGFHEEE +HNGHIHEE +Maximilian Mechler˙ +MNJFGEEE +GRJLFGEE +Andreas Goldberger˙ +ERIGGEEE +GLIGIGEE +Rok Benkovic˙ +GDLGEEEE +FFLKDFEE +Martin Schmitt˙ +JNKGGEEE +FRKFDFEE +Andreas Kttel˙ +EJNHDEEE +LFNLDEEE +Reinhard Schwarzenberger˙ +JFMHDEEE +HLMHDEEE +Marcin Bachleda˙ +ELPIEEEE +FNPFHEEE +Germany˙ +FDOEGEEE +GFOIFEEE +Austria˙ +GJREHEEE +JFRHFEEE +Finland˙ +HHQEFEEE +MFQGGEEE +Japan˙ +INAEDEEE +FFAGFEEE +Norway˙ +JLSEHEEE +LHSFFEEE +Poland˙ +KRCEHEEE +FNCFDEEE +Slovenia˙ +LFBEGEEE +MDBEIEEE +Switzerland/Czech Rep.˙ +MDEEGEEE +JLEEGEEE +Russia˙ +NJDEHEEE +HHDEFEEE +Finland II˙ +EHGFIEEE +FDGEIEEE +Roar Lj›kels›y˙ +FDFEHEEE +FHFFEFEF +Janne Ahonen˙ +HHBEFEEE +KRBLFMNE +Martin H”llwarth˙ +KRAEHEEE +NRAIGINE +Matti Hautam„ki˙ +EHDFGEEE +EDDFEENE +Tommy Ingebrigtsen˙ +JDCFHEEE +FLCGHHME +Not Completed +EFFEHEEE +EFFEEEEE +Not Completed +EFEEIEEE +EFEEFEEE +Not Completed +EFHEHEEE +EFHEEEEE +Not Completed +EFGEEEEE +EFGEIEEE +Not Completed +EFJEHEEE +EFJEDEEE +Not Completed +EFIEEEEE +EFIEGEEE +Martin H”llwarth˙ +ERNMEGFE +Janne Ahonen˙ +EDQKENEE +Adam Malysz˙ +ELPKIMFE +Adam Malysz˙ +EJSGFGFE +Janne Ahonen˙ +ERRMFGFE +Sigurd Pettersen˙ +EJBFFEFE +Sigurd Pettersen˙ +ERAMDGFE +Sven Hannawald˙ +EDDKHNEE +Matti Hautam„ki˙ +EJCGDGFE +Noriaki Kasai˙ +EJFGIGFE +Noriaki Kasai˙ +EDELHFFE +Martin H”llwarth˙ +ERHMHGFE +Matti Hautam„ki˙ +ERGFFNFE +Janne Ahonen˙ +EFJNIFFE +Martin H”llwarth˙ +ELIIELEE +Sven Hannawald˙ +ERLMEGFE +Michael Uhrmann˙ +EDKKHNEE +Martin H”llwarth˙ +ERNMHGFE +Roar Lj›kels›y˙ +EHMLHNFE +Sven Hannawald˙ +ELPHDGFE +1533702 +3337535 +31472 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +Wed 31 Dec 2003 3:11 +6 diff --git a/INTRO.SJR b/INTRO.SJR new file mode 100644 index 0000000..01ab6d9 --- /dev/null +++ b/INTRO.SJR @@ -0,0 +1,29 @@ +10 +22 +822 +1 +HILLBASE +1009542 +0 +1195 +239 +573 +830 +376 +1 +0 +ville k”n”nen +introduction replay +Fri 01 Feb 2002 03:10 +0 +0 +2690386 +0 + +--- Replay Data --- +*€€ĨMj€€ĨMj€€ĨMj€€ĨMj€€ĨMj€€ĨMj€€ĻMj€€ĻMj€€ĻMj€€ĻMj€€ĻMj€€ĻMi€€ĻMi€€§Mi€§Mi€€§Mi§Mi€€§Mi€€§Mi€§Mi€€¨Mi¨Mi€€¨Mi€€¨Mi€¨Mi€€¨Mi€€¨MigMi€€gMigMi€€gMi€€gMi€gMi€€gMigMi€€gMj€€gMj€gMj€€gMjgMj€€gMj€gMj€€gMjgMj€€gMj€gMj€€gMjgMj€€gMj€gMj€€gMjgMj€€gMj€gMjgMj€€gMjgMj€€gMj€gMjgMj€€gMj€gMj€€gMjgMj€gMjgMj€€gMj€gMigMi€€gMi€gMigMigMi€€gMi€gMigMi€gMigMi€gMi€€gMigMi€gMigMi€hNihNi€hNihNihNi€hNihNi€hNigMigMi€gMigMi€gMjgMj€gMj‚gMjgMj€gMjgMj€gMj‚‚gMj€gMjgMj‚gMj€gMjgMj‚gMj€gMjgMj‚gMj€gMj‚gMjgMk‚gMk€gMk‚gMkgMk‚gMk€gMk‚gMkgMk‚gMkgMk‚gMk€gMk‚gMkgMk‚gMk€gMkgMk‚gMl€gMl‚gMlgMl‚gMl€gMl‚gMlgMl‚gMl€gMl‚‚gMl€gMl‚gMlgMm‚gMm€gMm‚gMmgMm‚gMm€gMm‚gMmgMm‚gMm€gMngMn‚€gMngMn‚gMn€gMn‚gMngLn‚gLn€gLn‚gLngLn‚€fKn€fKn‚gLngLn‚€gLngLm‚gLm€gMm‚gLmgLm‚€fKmfKm‚fKm€fKm€fKm‚fKm€fKm‚fKl€fKl‚fKl€fKl‚€fJlfJl‚€fJlfJl‚€fIl€fIl‚€fIlfIl‚€fIl€fIl‚€fIkfIk‚€fIk€eHk‚€eHkeHk‚€eHk€eHk€eHk‚€eHk€eHk‚€eHk€eHk‚eHk€eGk‚€eGk€eGj‚€eGj€eGj‚€eGj€eGj‚€eGj€eGj‚€eGj€eGj‚€eGj€uGj‚€uGk€uGk‚€uGk€vGk‚€vGk€vGk‚€wGk€wGk€wGk‚€xGk€xGk‚€xGk€xGk‚€yGl€yGl‚€yTl€yTl‚€zTlzTl‚€zTl€{Tl‚€{Tl€{Tl‚€pTl€oTl‚€oTl€oTl‚€oTl€nTl‚nTl€nTl‚€nTl€nTk€nTk‚€nGk€nGk‚€nGk€nGk‚€nGk€nGk‚mGk€mGk‚€mGk€mGk‚€mGk€mGk‚€mGk€mGj‚€mGj€mGj‚€mGj€mGj‚€lGj€lGj‚€lGj€lGjlGj‚€lGj€lGj‚€lGj€lGj‚€lGj€lGj‚€kGj€kGj‚€kGi€kGi‚€kGi€kGi‚€kGi€kGi‚€kGi€kGi‚€kGi€kGi‚€kGi€kGi€kGi‚€kGi€kGj‚€kGj€kGj‚€kGj€kGj‚€kGj€kGj‚€kGjkGj‚€kGj€kGj‚€kGj€kGj‚€kGj€kGj€kGj‚€kGj€kGj‚€kGj€kGj‚€kGjkGj‚€kGk€kGk‚€kGk€kGk‚€kGk€kGk‚€kGkkGk‚€kGk€kGk€kGk‚€kGk€kGk‚kGk€kGk‚€kGk€kGk‚€kGkkGk‚€kGk€kGk‚€kGk€kGl‚kGl€kGl‚€kGl€kGlkGl‚€kGl€kGl‚€kGlkGl‚€kGl€kGl‚€kGmkGm‚€kGm€kGm‚kGm€kGm‚€kGm€kGmkGm‚€kGm€kGn‚kGn€kGn‚kGn€kGn‚€kGnkGn‚€kGn€kGn‚kGo€kGo‚kGo€kGo€kGo‚kGo€kGo‚kGo€kGo‚kGo€kGo‚€kGpkGp‚€kGpkGp‚€kGpkGp€kGp‚kGp€kGp‚kGp€kGp‚jGp€jGq‚jGq€jGq‚jGqjGq‚€jGqjGq‚€jGqjGqjGq‚€jGrjGr‚€jGrjGr‚jGr€jGr‚jGrjGs‚€jGsjGs‚jGs€kGskGt‚kGtkGt‚€kGtkGt‚kGtkGu‚€kGukGu‚kGukGu‚€kGukGukGv‚kGvkGv‚€kGvkGv‚kGvkGv‚kGwkGw‚€kGwkGwkGw‚kGwkGw‚kGwkGx‚kGxkGx‚kGx€kGx‚kGykGy‚kGykGykGy‚kGykGy‚kGykGy‚kGzkGz‚kGzkGz‚kGzkGzkGz‚kGzkGz‚kGz‚kGz‚kG{kG{‚kG{kG{‚kG{kG|‚kG|kG|kG|‚‚kG|kG|‚kG|kG|‚kG|kG}‚‚kG}kG}‚kG}kG}kG}‚‚kG~kG~‚kG~kG~‚kG~‚kG~‚kG~kG~‚kG~‚kG~kG‚kG‚kG‚kGkG‚kG€‚kG€‚kG€kG€‚‚kG€kG€‚kG‚kGkG‚‚kGkG‚kG‚kG‚kG‚kG‚‚‚kG‚kG‚‚‚kG‚kG‚‚kGƒ‚kGƒkGƒ‚‚kGƒkGƒ‚‚kGƒkGƒ‚‚kG„kG„‚‚kG„kG„‚kG„‚kG„‚kG„‚kG…‚kG…‚kG…‚kG…‚kG…‚kG…‚lG…‚mG†‚mG†‚nG†‚nG†‚‚nG†‚oG†‚‚oG‡oG‡‚‚pG‡‚pG‡‚‚pG‡‚pG†‚qG†‚ƒqG†‚qG†‚‚qG†‚qG†‚‚qH†ƒqJ†‚‚qJ†ƒqO†€rO†rO†‚‚rO†€rO†rO†rN†€}N†}N†‚}N†}N†€}N†}N†|O†€|O†‚‚|O†€|O†|O†|O†€}N†}N†}N†‚}N†}N†€}N†}N†€}N†}N†‚|O†|O†|O†€}N†}N†}N†‚}N†}N†€}N†}N†€}N†~M†‚~M†€~M†~M†~M†€~M†~M†‚~M†€~M†~M†€~M†~M†€~M†‚~M†~M†€~M†~M†€~M†~M†‚~M†~M†€~M†~M†€~M†~M†€~M†‚~M†~M†€~M†~M†€~M†~M†‚~M†€~M†~M†~M†€~M†~M†‚€~L†~L†€~L†~L†€~M†~M†‚~M†€~M†€~L†~L†€~L†~L†‚~M†€~M†~L†€~L†€~L†~L†‚~L†€~L†~L†€K†€K†K†‚€€K†€K†€€K†€€K†€K†€€K†€€K†‚€K†€€K†€K†€€K†€J†J†‚€J†€J†J†€J†€J†€J†‚K†€K†K†€K†€ˆJ†€ˆJ†‚ˆJ†€ˆJ†ˆJ†€ˆJ†€ˆJ†€ˆJ†‚ˆJ†€ˆJ†€ˆJ†ˆJ†€ˆJ†€ˆJ†‚ˆJ†€ˆJ†€ˆJ†€ˆJ†ˆI†€ˆI†‚€ˆI†ˆI†€ˆI†€ˆI†€ˆI†€ˆI†€ˆI†‚ˆI†€ˆI†€ˆH†€ˆH†ˆH†€ˆI†‚€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†ˆH†‚€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†‚ˆH†€ˆI†€ˆI†€ˆH†€ˆH†€ˆH†‚€ˆH†ˆH†€ˆH†€ˆH†€ˆH†€ˆH†‚€ˆH†€ˆH†€ˆH†ˆH†€ˆI†€ˆI†€ˆH†‚€ˆH†€ˆH†€ˆH†ˆH†€ˆH†€ˆH†‚€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†ˆH†‚€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†€ˆH†‚ˆH†€ˆI†€ˆI†€ˆH†€ˆH†€ˆH†‚€ˆH†ˆH†€ˆH†€ˆH†€ˆH†€ˆH†‚€ˆH†€ˆH†€ˆH†ˆH†€ˆH†€ˆG†‚€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†‚€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†‚€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†‚€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†€ˆG†‚€ˆG†ˇˇ⡡ˇˇ<ˇˇˇˇsˇˇˇĮUˇˇˇĪˇˇˇˇ ˇˇˇˇˇˇˇgiˇˇ +sˇˇŠ ˇˇˇrˇˇˇßeĮˇˇ gˇˇˇiˇˇˇsˇˇˇ]t/ˇˇe +ˇˇßrŠˇˇ eˇˇdߡˇ ˇˇØtFˇˇoˇˇĪ:Ŗˇˇ ˇˇŨˇßˇˇˇˇˇĪˇFˇˇ ˇˇ—ˇˇˇˇˇˇ°ˇĄˇˇ×ˇˇˇ€ˇßˇˇˇˇˇˇˇˇČˇˇˇg;ˇˇˇ +ˇˇˇˇŠˇˇˇˇˇˇˇˇßˇˇˇˇ ˇˇˇˇˇˇˇēˇˇˇˇˇˇˇ¤ˇˇˇß9ĨMŠˇĨMŠ†&ĨMŠg¯ĨMŠĨMŠˇšĨMŠ8ĻM‰H/ĻM‰I +ĻM‰L5ĻM‰LPĻM‰BŋĻM‰AĻM‰S§M‰Eˇ§M‰ˇ§Mˆˇˇ§MˆˇÄ§Mˆˇâ§Mˆˇ§MˆS¨MˆSJ¨Mˆa ¨Mˆtv¨Mˆ 3¨Mˆ1 ¨Mˆ0B¨M‡ AgM‡FCgM‡eKgM‡b0gM‡ .gM‡2PgM‡0CgM‡0XgM‡1XgM‡ lgM†1DgM†7OgM†: gM†3NgM†7OgM†BTgM†A gM†AgM…HTgM…uTgM…gEgM…eMgM… PgM…JTgM…u gM…mTgM…pOgM… gM„iEgM„nDgM„ IgM„kTgM„u gM„pTgM„iHgM„ IgMƒiSgMƒn gMƒtFgMƒrIgMƒoLgMƒFEgMƒ!gMƒˇugMƒˇâgM‚ˇ-> +248:ENDE + +251:Da geht er hin... +252:Willst du wirklich aufh”ren? +253:Oh, jetzt schon aufh”ren? +256:M”chtest du wirklich aufh”ren? +257:Bist du wirklich sicher? +258:Drcke J zum beenden. + +261:Achtung! Du musst vier (4) +262:oder acht (8) Teilnehmer haben +263:um den Teamcup zu starten! +264:Hole deine Freunde zum mitspielen +265:oder starte selbst viermal. + +270:SJ3 Schanzen Editor +271:(Pfeiltasten, ENTF, +272: EINGABE oder ESC) +273:Dateiname +274:Schanzenname +275:*Neue Schanze* +276:-Ende- +277:-Start- +278:Schanze testen! + +280:Pfeil Oben +281:Pfeil Links +282:Pfeil Rechts +283:Pfeil Unten + +285:(L)ade +286:(S)peichern +287:(Z)ufalls +/288:S(O)rt by WC Points +288:S(O)rtiert n. WC Punkten +/289:S(O)rt by Total Points +289:S(O)rtiert n. Ges.Punkten + +290:Keine Aufzeichnungen! +291:Autor: +292:Name: +293:Dateiname: +294:Schanze: +295:Ende, OHNE Speichern +296:Ende und Speichern +298:(S)peichern + +300:Springer +301:Auswahl Springer +302:*Neuer Springer* + +304:Name: +305:Name real: +306:Anzugsfarbe: +307:Skifarbe: +308:Ersetzt: +309:Trainer: +/310:Skip Quali: +310:KeineQuali: + +311:Springer zurcksetzen +312:Ende + +313:Anzahl Sprnge: +314:Weltcups beendet: +315:Siege: +316:Weltcup Siege: +317:Bester Weltcup: +318:Beste 4Schanzen: +319:Weitester WC Sprung: +320:Weitester Sprung: +321:K.O.T.H level: + +322:(Pfeiltasten, +323:ENTER bearbeiten, +324:ENTF entfernen) +325:ENTER einsteigen, +326:ENTF l”schen) +328:Springer l”schen +329:Springer zurcksetzen + +330:Tasten +331:Abspringen +332:Tiefer gehen +333:H”her gehen +334:Telemark Landung +335:Haferl Landing +336:Vorgabewerte +337:Ende + +340:Hangtime +341:L„nge +342:Geschwindigkeit: +343:Custom + +345:bereits vorhanden +346:berschreiben? + +350:Aufzeichnung gespeichert. +351:Aufzeichnung nicht gespeichert. +352:Eigene Auswahl gespeichert. +353:Eigene Auswahl nicht gespeichert. +354:Neue Schanze gespeichert. +355:Neue Schanze nicht gespeichert. +356:Keine eigene Auswahl! + +360:Willkommen zum Skispringen mit SJ3. +361:Sie sehen eine kurze Anleitung zum Spiel. +362:Die Idee beim Skispringen ist es, m”glichst +363:weit zu fliegen und dann ohne Sturz zu landen. +364:Zu Beginn des Versuchs sitzt ihr Springer auf +365:dem Balken. Der Anlauf beginnt mit 'Pfeil rechts'. +366:Den Windmesser sehen sie unten links. Gegenwind (-) +367:ist besser, da die Sprungkurve h”her wird. +368:Der richtige Moment fr den Absprung ist der +369:Schlssel zum Erfolg. Benutzen Sie 'Pfeil nach oben'. +370:Nun mssen sie mit 'Pfeil rechts' in die Vorlage gehen +371: um den Luftwiderstand zu reduzieren. +372:Manchmal zwingen Windst”sse zu Korrekturen der +373:Vorlage mit 'Pfeil links' bzw. 'Pfeil rechts'. +374:Wenn der Boden n„her kommt, ist es Zeit +375:sich Gedanken ber die Landung zu machen. +376:Die 'T'-Taste steht fr die Telemarklandung. Sie ist +377:schwieriger, bringt aber bessere Haltungsnoten. +378:Die 'R'-Taste beginnt die parallele Landung, +379:die vor allem bei grossen Weiten sicherer ist. +380:Das wars! Diesen Sprung finden sie bei AUFZEICHNUNGEN. +381:Weitere Hinweise finden sie in MANUAL.TXT. + +390:Oben +391:Mitte +392:Unten +393:Links +394:Mitte +395:Rechts +396:Springer + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Trainers Stimme: +401:Professional +402:Deine Flughaltung darf nicht zu flach werden. +403:Gute Haltung im Flug. +404:Deine Flughaltung ist zu aufrecht. +405:Versuche das n„chste Mal zu landen. +406:Beginne die Landung frher. +407:Ah, das war diesmal Pech. +410:Das Sprung war schlecht. +411:Der Sprung war noch nicht gut. +412:Das war ein m„ssiger Sprung. +413:Das war ein guter Sprung. +414:Ein hervorragender Sprung! +415:Unglaublich! Woher hattest du den Aufwind? +418:Beginne den Absprung viel frher. +419:Der Absprung war zu sp„t. +420:Der Absprung war immer noch etwas sp„t. +421:Guter Absprung dieses Mal. +422:Ein perfekter Absprung! +423:Ein bisschen zu frh im Absprung. +424:Beginne den Absprung etwas sp„ter. +425:Schlechter Absprung! Viel sp„ter. +428:Ich meine viel frher. +429:Die Landung war zu sp„t. +430:Die Landung war fast zu sp„t. +431:Gute Landung. +432:Sehr sch”n. Das gibt Punkte. +433:Die Landung war etwas frh. +434:Keine Angst weiter zu fliegen. +435:Bitte 'T' or 'R' Taste benutzen. + +441:Locker +442:Hei, du liegst auf dem Ski! +443:Nur Fliegen ist sch”ner. +444:Keine Angst Junge, leg dich vor. +445:Landen! Sonst tut es weh. +446:Du landest ja immer noch auf der Nase. +447:Na ja, man kann nicht jeden landen. +450:Das war zu lasch. +451:Jetzt bist du fast ins Schwitzen gekommen. +452:Das sah schon wie Springen aus. +453:Ah, das nenne ich Springen. +454:So liebe ich das! +455:Wahnsinn! Das war ja Superman! +458:Ganz sch”n verschlafen, was... +459:Zum Fliegen geh”rt ein Absprung. +460:Der Absprung war nicht der Beste. +461:Eh Mann, der kam gut vom Tisch. +462:Was ein Absprung! +463:Einen Tick zu frh im Absprung. +464:Lass dir Zeit beim Absprung. +465:Oh, irgendwann verletzt du dich dabei. +468:Wir sollten an der Landung arbeiten. +469:Bist du lebensmde?... +470:Das war knapp bei der Landung. +471:Die Landung - Bombenfest. +472:Aber Hallo. Herr Telemark pers”nlich. +473:Landen kann man auch sp„ter noch... +474:Probiere es doch mal mit Fliegen. +475:Keine Angst vor der Tastatur. + +481:Streng +482:Du bist zu flach, Mann. +483:Die Haltung war ganz nett. +484:Feigling, spring wie ein Mann. +485:Oh Gott! Wo war die Landung? +486:Nein! Beginne die Landung rechtzeitig! +487:Steh auf und mach dich von der Schanze! +490:Ich sah nie einen schlechteren Sprung. +491:Meine Mutter springt besser. +492:Was ist los? Willst du nicht? +493:Das kannst du besser. +494:Manche Trainer w„ren jetzt zufrieden. +495:Ja, so habe ich es dich gelehrt. +498:Schrecklich! Wo war der Absprung! +499:Der Absprung ist zu sp„t. 50 Kniebeugen! +500:Immer noch zu sp„t. 25 Kniebeugen! +501:Kannst du nicht etwas besser abspringen? +502:So will ich den Absprung sehen. +503:Zu frh! Lernst du das den nie? +504:Katastrophal! 50 Kniebeugen! +505:Die schlechteste Landung aller Zeiten. +508:Ist Landen zu schwer fr dich? +509:Lande rechtzeitig! +510:Die Landung war zu riskant. +511:Das sah fast wie eine Landung aus. +512:Die Landung war in Ordnung. +513:Sie bei der Landung nicht so feige. +514:Wovor frchtest du dich? Flieg endlich! +515:Was soll das? Lande oder lass es! + + +*E +Polski +/Translated by Maciej Krzyzanowski +/v3.10 by Filip Wojcieszyn + +/Basic Items +1:Jeden +2:Dwa +3:Trzy +4:Cztery +5:Piec +6:Tak +7:Nie +8:z +9:Zaden +11:Zarejestrowana +12:Shareware +13:Normalny +14:Niski +15:Nacisnij jakis klawisz... +17:Menu Glowne +18:Menu skokow + +/Main Menu +20:Skacz! +21:Wpisz skoczkow +22:Opcje +23:Najlepsze wyniki +24:Rekordy skoczni +25:Powtorki +26:Wyjscie z SJ3 + +27:Puchar Swiata SJ3 +28:Wlasny Puchar +29:Turniej 4 skoczni +30:Konkurs Druzynowy +31:Krol skoczni +32:Praktyka +33:Powrot do Menu + +34:Skoczkowie: + +35:Ta wersja SJ3 +36:jest zarejestrowana dla: + +38:To jest niezarejestrowana +39:wersja SJ3. + +40:Przeczytaj Register.Txt! + +41:Badz nalpeszym gosciem +42:w okolicy. Zarejestruj!!! + +43:Chcesz byc szanowany przez kumpli? +44:Zarejestruj!!! + +45:To nie jest darmowa gra. +46:Zrob to co powinienes - zarejestruj. + +47:Tylko do dwoch graczy!!! +48:Zarejestruj SJ3!!! + +/Other Items +51:Praktyka +52:Trening +53:Kwalifikacje +54:Runda 1 +55:Runda 2 +56:Nastepny... +57:Skoczkowie komputerowi... +58:Belka startowa: +59:Nacisnij (O) aby ustawic Opcje +60:O +61:Aktualnie +62:Do prowadzenia +63:Do wygrania +65:Rekord skoczni +67:Pozostalo Skoczkow: +68:Do Prowadzenia: +69:Aktualnie Ostatni: +70:Aktualna klasyfikacja PS +71:Aktualna klasyfikacja PD +75:Opuszczasz +76:Konkursy +77:Runde +78:Konkurs +79:jest Zdyskwalifikowany! + +81:Tabela - Konkurs +82:Kwalifikacje - Konkurs +83:z 4 +84:Turniej 4 skoczni - Konkurs +85:Koncowe Wyniki Turnieju Czterech Skoczni +86:Lista... +87:Wyniki po: +88:Skoczek +89:Statystyki Pucharu Swiata: +90:Koncowe wyniki + +91:Wyniki druzynowego PS po: +92:Koncowe wyniki konkursu druzynowego +93:Statystyki druzynowe +94:System Nokautu par + +95:Klasyfikacja +96:Krol skoczni +97:Wynik +98:PS +99:TCS: +100:Razem: +101:Po za Zawodami: +102:Nie skacza: +103:Wyeliminowani: +104:W szatni: +105:Nie obchodza nas: +106:Gdzie? +107:Druzyna: +108:Poz +109:Pkt +110:PD + +111:Przygotuj sie do Konkursu +112:Sklad druzyny: +113:Nazwij druzyne +114:Druzyna + +115:Najlepszy wynik +116:Wczytaj zestaw skoczni +118:Wybierz skocznie do twojego Pucharu +117:Zapisz zestaw skoczni +119:Uzyj strzalek, ENTER wybiera, ESC wychodzi + + +120:Komputerowi skoczkowie: +121:Rozpocznij *Krola skoczni* +122:Poziom Trudnosci +123:Wybierz Przeciwnikow +124:Skaczesz na +125:Wiatr? +126:Runda? +127:Wroc Menu +128:Nowy rekord zestawu skoczni! +129:Stary rekord: + +130:K.S. Poziom trudnosci +131:DLA MISTRZOW SWIATA +132:JESTES DOBRY? +133:DLA NIEZLYCH SKOCZKOW +134:SLABEUSZE +135:BULKA Z MASLEM +136:DLA MALYCH DZIEWCZYNEK +137:WLASNY +138:Wybierz swoich przeciwnikow +139:uzywaj strzalek by wybrac poziom +140:ENTER wybiera, ESC wychodzi +141:Imie +142:Miejsce +143:Krol! + +/145:Wpisz skoczkow +146:(Strzalki, ENTER, DEL lub ESC) +/147:*Dodaj gracza* +/148:Wyjscie +/149:Wybierz kolor kombinezonu +150:(Strzalki, ENTER lub ESC) + +151:Gdzie +152:chcesz dzisiaj +153:skakac? +154:Wyjscie +155:Losowa skocznia +156:Wiecej skoczni... +157:Strona +158:Nastepna strona +159:Poprzednia strona + +160:Krol Skoczni +161:Nie ukonczyl +162:Zapisano najlepsze wyniki zestawu +163:Najlepsze 20 wynikow PS +164:Najlepsze 20 wynikow PD +165:Najlepsze wyniki konkursu 4 skoczni +166:Imie +167:Poz +168:Punkty +169:Kiedy? +170:Rekordy skoczni +171:Kto? +172:Ile? +172:Ile? +173:Plik +174:Pkt +/173: +/Setup Menus +175:To jest menu glowne +176:To sa glowne opcje +177:Kilka opcji skakania +178:Kilka opcji wynikow + +180:O Tak +181:Jasne +182:Tak jest +183:Spoko +184:Tak +185:O nie +186:Nigdy +187:Nie +188:Nie +189:Nieee + +190:Resetuj +191:Zeruj +192:Najlepsze wyniki? +193:Jestes pewien? +194:Zaraz skasujesz +/194: +195:Wyjscie z opcji +196:Opcje glowne +197:Opcje skakania +198:Wyniki i setup +199:Ustaw klawiszologie +200:Ustaw rekordy skoczni-Twoje cele +201:Generator skoczni +/200:Manager skoczni + +203:Wroc do opcji +204:Jezyk? +/203:Trener? +205:Beepniecia? +206:Poziom grafiki? +207:Imiona przeciwnikow (NAMES?.SKI)? + +208:Opcje w szarym kolorze +209:Sa dostepne po rejestracji + +211:Powrot do Opcji +212:Rundy Treningowe? +213:Ekstra Statystyki? +214:Pokaz tabele z roznicami? +215:Pokaz klasyfikacje PS z roznicami? +216:Skrocona wersja tablic z wynikami? +217:Niewidoczne tlo tabeli? +/217:Prezentacja skoczni? +/218:Opuszczaj nie potrzebne kwalifikacje? +218:Automatycznie zapisuj powtorki rekordow? +219:Zaznaczac Twoje docelowe rekordy skoczni? +220:Wybierz ogladanych skoczkow komputerowych? +221:Wybierz polozenie wiatromierza +/218:Ilu komputerowych przeciwnikow chcesz ogladac? +219:Pokazywac Twoje docelowe rekordy skoczni? +220:Wybierz ogladanych skoczkow komputerowych? +221:Wybierz polozenie wiatromierza +222:Uzyj System Nokautu w Konkursie 4 Skoczni + +225:Wyjdz z opcji wynikow +226:Czy komputer moze ustanowic rekord skoczni? +227:Dopuszczaj takie same imiona +228:Resetuj Wyniki +229:Wyzeruj wyniki +230:Przywroc standardowe opcje. + +231:Nigdy +232:Nie w 4 s +233:Zawsze + +240:Zaden +235:Lider +236:Najlepsza 3 +237:Najlepsza 5 +238:Najlepsza 10 +239:Wszystkich! + +242:Cel +243:Uzyj strzalek, ESC wychodzi +245:Juz wychodzisz? +/Four letter words for the different lists +246:POPR +247:NAST +248:O.K. + +251:Wiec wychodzisz... +252:Naprawde chcesz wyjsc? +253:Tak szybko wychodzisz ? +256:Jestes pewien? +257:Jestes pewny na 100%? +258:Nacisnij T zeby wyjsc. + +261:HEJ! Musisz miec (4) +262:lub (8) wpisanych graczy +263:by zagrac konkurs druzynowy! +264:Idz zalatw paru kumpli +265:lub sklonuj samego siebie. + +270:Generator skoczni +271:(Strzalki, DEL, +272: ENTER lub ESC) +273:Nazwa pliku +274:Nazwa skoczni +275:*Dodaj nowa skocznie* +276:-Wyjscie- +277:-Start- +278:Przetestuj swoja skocznie! + +280:Arrow Up +281:Arrow Left +282:Arrow Right +283:Arrow Down + +285:(W)czytaj zestaw +286:(Z)apisz zestaw +287:(L)osowy zestaw +288:S(O)rtuj wg punktow Pucharu Swiata +289:S(O)rtuj wg punktow lacznych + +290:Nie znaleziono zadnych powtorek! +291:Autor: +292:Nazwa: +293:Nazwa pliku: +294:Skocznia: +295:Wyjdz nie zapisuj +296:Zapisz i wyjdz +298:(Z)apisz powtorke + +300:Skoczkowie +301:Wybierz skoczkow +302:*Stworz nowego skoczka* + +304:Imie: +305:Pr. imie: +306:Kolor kombinezonu: +307:Kolo nart: +308:Zamien: +309:Trener: +310:Bez kwalif.: +311:Zresetuj skoczka +312:Wyjscie + +313:Skokow w sumie: +314:Ukonczone Puchary Swiata: +315:Wygrane Konkursy: +316:Wygrane Puchary Swiata: +317:Najlepszy wynik w PS: +318:Najlepszy wynik w TCS +319:Najdluzszy skok w PS: +320:Najdluzszy skok: +321:KOTH level: + +322:(Uzyj strzalek, +323:ENTER edytuje skoczka, +324:DEL usuwa go z kolejnosci) +325:ENTER aby wybrac, +326:DEL aby skasowac skoczka) +328:Usun Skoczka +329:Resetowanie skoczka + +330:Klawiszologia +331:Wybicie +332:Do przodu +333:Do tylu +334:Ladowanie z telemarkiem +335:Ladowanie na obie nogi +336:Przywroc domyslne +337:Wyjscie + +340:Czas lotu +341:Odleglosc +342:Predkosc: +343:Wlasny + +/345:already exists. +/346:Write over? + +345:Juz istnieje +346:Pisac ponad? + +350:Powtorka zostala pomyslnie zapisana. +351:Powtorka nie zostala zapisana. +352:Wlasny zestaw zostal zapisany. +353:Wlasny zestaw nie zostal zapisany. +354:Dodatkowa skocznia zostala zapisana. +355:Dodatkowa skocznia nie zostala zapisana. +356:Nie znaleziono wlasnych zestawow! + +360:Witaj w SJ3 i swiecie skokow narciarskich. +361:Oto krotki wstep do gry. +362:Istota tego sportu jest latac tak daleko +363:jak tylko to mozliwe i ladowac bezpiecznie. +364:Twoj skoczek siedzi na belce na poczatku +365:najazdu. Uzyj strzalki w prawo aby zaczac zjezdzac. +366:Wiatromierz jest usytulowany w lewym dolnym rogu. +367:Wiatr czolowy jest lepszy, gdyz daje wieksza nosnosc. +368:Kluczem do sukcesu w skokach jest dokladne +369:wybicie. Aby sie wybic, nacisnij strzalke w gore. +370:Teraz powinienes nadac skoczkowi odpowiednia pozycje, +371:aby zmniejszyc opor powietrza, uzyj strzalki w prawo. +372:Czasami, nagly powiew wiatru moze zaburzyc twoja +373:pozycje w locie. Da sie to naprawic strzalka w lewo. +374:W miare zblizania sie do ziemi, powinnienes pomyslec +375:o tym jak bezpiecznie wyladowac. +376:Klawisz 'T' rozpoczyna ladowanie telemarkiem. Jest +377:wolniejsze i mniej bezpieczne, ale daje wyzsze noty. +378:Klawisz 'R' rozpoczyna pewniejsze ladowanie na 2 nogi, +379:ktore przydaje sie szczegolnie w dalekich skokach. +380:I to wszystko! Mozesz ponownie obejrzec to intro, +381:wybierajŨc je z 'Powtorek'. Wiecej o SJ3 w MANUAL.TXT. + +390:Gora +391:Srodek +392:Dol +393:Lewo +394:Srodek +395:Prawo +396:Skoczek + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Trener: +401:Profesjonalny +402:Staraj sie tak nie wychylac. +403:Dobra sylwetka w locie. +404:Twoja pozycja w locie jest za wysoka. +405:Nastepnym razem wyladuj. +406:Zacznij ladawac wczesniej. +407:Uuu, miales pecha. +410:To byl kiepski skok. +411:Ciagle kiepsko to wyglada. +412:To calkiem dobry skok. +413:Dobry skok. +414:Swietny skok! +415:Niewiarygodne? Gdzie ty ladujesz? +418:Wyjdz z progu znacznie wczesniej. +419:Wybicie bylo za pozno. +420:Wybicie jest ciagle troche za pozno. +421:Tym razem lepsze wybicie. +422:Idealne wyjscie z progu! +423:Troszke spozniles wybicie. +424:Nie wybijaj sie tak szybko. +425:To fatalne wyjscie z progu. +428:Mialem na mysli znacznie wczesniej. +429:Tym raze za pozno. +430:Ladowanie nie w tej chwili. +431:OK, dobre ladowanie. +432:Za to powinny byc dobre noty. +433:Moglbys poczekac troche z ladowaniem. +434:Nie boj sie leciec dalej. +435:Nacisnij 'T' lub 'R', prosze. + +441:Zrelaksowany +442:Nie wykladaj sie tak. +443:Pieknie leciales. +444:Nie boj się wylozyc. +445:Sprobuj wyladowac nastepnym razem, to pomocne. +446:Caly czas ladujesz na pysku. +447:Nie mozesz ustac ich wszystkich. +450:To zbyt relaksujace. +451:Co to sa za skoki. +452:Rewelacyjne to nie bylo. +453:No, to jest ladny skok. +454:O tak, laski to pokochaja! +455:To bylo wielkie! +458:Co za beznadziejne wybicie... +459:Chcesz poleciec? Wyjdz z progu szybciej. +460:Twoje wybicie jest kiepskie. +461:Niezle wybicie. +462:Wlasnie pokochalem cie za twoje wybicie! +463:To wybicie bylo troche zawczesnie. +464:Nie spiesz sie z tym wybiciem. +465:Kiedys sie zabijesz. +468:Powinienes popracowac nad ladowaniem. +469:Nie boisz sie, ze sie zabijesz?.. +470:To bylo na krawedzi ryzyka. +471:Solidne ladowanie. +472:Ooo, Pan miekie ladowanie jest w okolicy. +473:Nie peniaj ladowac... +474:Nie cykaj. +475:Nie boj sie klawiatury koles. + +481:Surowy +482:Jestes za bardzo wychylony glupku. +483:Swietna pozycja w locie, mistrzu. +484:Wychylaj sie jak facet. +485:Boze! Gdzie ladowanie? +486:Nie! Rozpocznij pieprzone ladowanie! +487:Bierz swoj tylek i idz popracuj! +490:Nigdy nie widzialem gorszego skakania. +491:Moja matka skacze lepiej. +492:Co jest? Chcesz do mamusi? +493:Mozesz to zrobic lepiej. +494:Kilku trenerow byloby z tego zadowolonych. +495:Teraz skaczesz jak kazalem. +498:Okropnie! Co to za wybicie! +499:Wybicie bylo spoznione! +500:Jeszcze troche opoznione wybicie! +501:Nie mozesz wybic sie wczesniej? +502:Teraz bylo tak jak chcialem. +503:Za wczesnie! Nie mozesz sie nauczyc? +504:Katastrofalne wybicie! +505:Nigdy nie widzialem gorszego wybicia. Idz do domu. +508:Ladowanie jest za trudne, palancie? +509:Nie! Zacznij ladowac! +510:Takie ladowanie jest za ryzykowne. +511:To prawie wygladalo jak ladowanie. +512:Mysle, ze to bylo niezle ladowanie. +513:Nie cykaj sie ladowac! +514:Czego sie boisz! Lec do cholery +515:Jestes glupi? Laduj, albo do domu! + + +*F +Norsk +//Translated by Kenneth Aune Moum +//v3.10 translated by Allan Hovland + +/Basic Items +1:En +2:To +3:Tre +4:Fire +5:Fem +6:Ja +7:Nei +8:av +9:Ingen +11:Registrert +12:Shareware +13:Normal +14:Lav +15:Press a key... + +17:Hoved Meny +18:Hopp Meny + +/Main Menu +20:Hopp! +21:Skriv inn Navn +22:Innstillinger +23:Rekorder +24:Bakkerekorder +25:Repriser +26:Avslutt SJ3 + +27:SJ3 Verdens Cup +28:Egen Verdens Cup +29:Tysk/st. Hoppuka +30:Laghopping +31:Kongen av Bakken +32:Trening +33:Til Hoved Menyen + +34:Hoppere: + +35:Denne versjonen +36:er registrert til: + +38:Dette er en uregistrert +39:versjon av SJ3. + +40:Les Register.Txt N†! + +41:Hvordan du kan bli den kuleste +42:personen i gata, + +43:Vil du ha mer respekt fra +44:vennene dine? Registrer SJ3! + +45:Dette er ikke et gratis spill. +46:Gjr det rette, register. + +47:Bare To Spillere Tillat +48:i denne Uregistrerte versjonen + +/Other Items +51:Trening +52:Pr›ve Omgang +53:Kvalifiserings Runde +54:F›rste Omgang +55:Andre Omgang +56:Nestemann ut... +57:Datastyrte hoppere... +58:Avsats: +59:Trykk (I) for innstillinger +60:I +61:For ›yeblikket +62:Trenger for † lede +63:Trenger for † vinne +65:Bakkerekord +67:Hoppere Igjen: +68:Trenger for † sl†: +69:P† Sisteplass for ›yeblikket: +70:Current WC Standings +71:Current TC Standings +75:Mister Neste +76:Konkurranser +77:Runde +78:Konkurranse +79:er diskvalifisert! + +81:Resultat - Bakke +82:Kvalifisering - Bakke +83:av 4 +84:Den Tysk/st. Hoppuka - Bakke +85:Resultater etter den Tysk/st. Hoppuka +86:(begrenset liste) +87:Stillingen etter Bakke +88:Hopper +89:Verdens Cup Statistikk for +90:Sluttresultat av + +91:Resultater etter Lagkonkurranse Bakke +92:Sluttresultat etter Lagkonkurransen +93:Lagkonkurranse Statistikk for +94:Knock-out system parene + +95:Stillingen +96:Kongen av Bakken +97:Poeng +98:VC +99:Tysk/sterriske: +100:Totalt: +101:Ut av Konkurransen: +102:Hopper ikke lenger: +103:Eliminerte Hoppere: +104:I garderoben: +105:Ikke sammen med oss lenger: +106:Hvor? +107:Lag: +108:Stl +109:Poeng +110:TC + +111:Gj›r deg klar til Lagkonkurransen +112:Program for Lagkonkurransen: +113:Skriv inn navn p† laget +114:Lag + +115:Beste Resultat: +116:pne Custom Hill Set +118:Velg bakker for din egen Verdens Cup +117:Lagre Custom Hill Set +119:Bruk piltaster, ENTER starter, ESC Exit + + +120:Datahoppere: +121:Start *Kongen av Bakken* +122:Velg Vansklighetsgrad +123:Velg Motstandere +124:Hopper i +125:Vind? +126:Runder? +127:Tilbake Til Hovud Meny +128:Ny Custom Set Rekord! +129:Gammel Rekord: + +130:Vansklighetsgrad +131:DEN ULTIMATE UTFORDRING +132:VANSKLIG OPPGAVE +133:VARIERT MOTSTAND +134:IKKE FOR VANSKELIG +135:GAMLEHJEMMET +136:SM JENTER +137:CUSTOM +138:Velg dine Motstandere +139:Bruk Pilene for † velge Vansklighetsgrad +140:ENTER velger, ESC avslutter +141:Navn +142:Rangering +143:Kongen! + +/145:Skriv inn Navn +146:(Bruk pilene, ENTER, DEL or ESC) +/147:*Tilf›y Hopper* +/148:Avslutt +/149:Velg farge p† hoppdrakten +150:(Bruk pilene, ENTER or ESC) + +151:Hvor Vil Du +152:Hoppe +153:I Dag? +154:Avslutt +155:Tilfeldig VC Bakke +156:Flere Bakker... +157:Side +158:Neste Side +159:Forrige Side + +160:Kongen av Bakken Utfordringer +161:Ikke fullfrt +162:Saved Custom Hill Bests +163:Topp 20 SJ3 Verdens Cup Resultat +164:Topp 10 Lagkonkurranse Resultat +165:Topp 5 Tysk/sterriske Hoppuka Resultat +166:Navn +167:Pos +168:Poeng +169:N†r? +170:Bakkerekordene +171:Hvem? +172:Hvor Langt? +172:Hvor mye? +173:File +174:Pts +/173: +/Setup Menus +175:Innstillinger +176:Hovedinnstillinger +177:Hoppinnstillinger +178:Noen Innstillinger Vedr›rende Rekorder + +180:Jaja! +181:S†klart +182:Ja +183:Jepp! +184:Ja +185:Nei +186:Ikke p† tale! +187:Nei +188:Nei +189:Nei + +190:Tilbakesktill +191:Nullstill +192:Bakkerekordene? +193:Er Du Sikker +194:Slette? +/194: +195:Avslutt innstillingene +196:Hovedinnstillingene +197:Hoppinnstillingene +198:vrige innstillinger +199:Tilpass taster +200:Sett m†l for bakkerekorder +201:Lag en ny bakke +/200:Bakkestyrer + +203:Tilbake til innstillingene +204:Spr†k? +/203:Trenertype? +205:PC lyd? +206:Grafikkniv†? +207:Motstandere (NAMES?.SKI)? + +208:Det i gr†tt er bare +209:tilgjenglig n†r du registrerer SJ3 + +211:Tilbake til Hovedinnstillingene +212:Trenings Runde? +213:Ekstra Statistikk? +214:Vis Resultattavlen med forskjeller? +215:Vis VC liste med forskjeller? +216:Kompakt Resultattavle? +217:Usynlig Resultattavle Bakgrunn? +/217:Forh†ndsvisning av bakken? +/218:Hopp over Undvending Kvalifisering? +218:Lagre repriser p† bakkerekorder automatisk? +219:Sett opp bakkerekord m†l? +220:Velg viste datastyrte hopperer? +221:Velg plassering av vindm†ler +/218:Se Hvor Mange Datahoppere? +219:Sett opp bakkerekord m†l? +220:Ser hvor mange datastyrte hoppere? +221:Velg plassering av vindm†ler +222:Bruk knock-out systemet i hoppuken? + +225:Tilbake Til innstillingene +226:Kan Datahoppere Sette Bakkerekorder? +227:La Det Vere Flere Like Navn p† Listen? +228:Tilbakestill Rekorder +229:Slett Rekorder +230:Tilbakestill Innstillingene + +231:Aldri +232:Ikke i hoppuken +233:Alltid + +240:Ingen +235:Lederen +236:Topp3 +237:Topp5 +238:Topp10 +239:Alle! + +242:M†l +243:Bruk piltaster, ESC exit +245:Drar du allerede? +/Four letter words for the different lists +246:FORG +247:NEST +248:FRDG + +251:S† du drar... +252:Vil du avslutt SJ3? +253:h, drar du s† tidlig? +256:Er du sikker p† det her? +257:Er du helt sikker? +258:Skriv J for † avslutt no! + +261:Hey! Du m† ha fire (4) +262:eller †tte (8) hoppere skrevet opp +263:f›r du starter Lagkonkurransen! +264:G† † sp›r noen av vennene dine om de vil vere med +265:eller bare klon deg selv flere ganger! + +270:SJ3 Bakkelager +271:(bruk pilene, DEL, +272: ENTER eller ESC) +273:Filnavn +274:Bakkenavn +275:*Lag Ny Bakke* +276:-Avslutt- +277:-Start- +278:Test Bakken Din! + +280:Piltast Frem +281:Piltast Venstre +282:Piltast H›gre +283:Piltast Ned + +285:(L)oad set +286:(S)ave set +287:(R)andom set +288:S(o)rter etter WC poeng +289:S(o)rter etter Total poengsum + +290:Ingen repriser funnet! +291:Hopper: +292:Navn: +293:Filenavn: +294:Bakke: +295:G† ut, Ikke lagre +296:G† ut og lagre +298:(L)agre Reprise + +300:Hoppere +301:Velg Hoppere +302:*Lag ny hopper* + +304:Navn: +305:Ekte Navn: +306:Dress farge: +307:Ski farge: +308:Erstatt: +309:Trener: +310:Hopp over kvali? +311:Nullstill hopper +312:Tilbake + +313:Totalt antall hopp: +314:Verdenscuper gjennomfrt: +315:Renn vunnet: +316:Verdenscuper vunnet: +317:Beste VC Resultat: +318:Beste Hoppuke: +319:Lengste VC hopp: +320:Lengste hopp: +321:KAB Nivå: + +322:(Bruk piltaster, +323:ENTER editer hopper, +324:DEL sletter fra listen) +325:ENTER f”r opp, +326:DEL slett hopper) +328:Slett hopper +329:Resetting jumper + +330:Keymap +331:Take-off +332:Roter framover +333:Roter bakover +334:Telemark landing +335:To-fots landing +336:Returner til defaults +337:Exit + +340:Tid i lufta +341:Lengde +342:Fart: +343:Custom + +345:Eksisterer allerede. +346:Lagre Over? + +350:Reprisen er lagret. +351:Reprisen er ikke lagret. +352:Custom set er lagret. +353:Custom set er ikke lagret. +354:Ekstra bakke lagret. +355:Ekstra bakke er ikke lagret. +356:Ingen Custom Sets Funnet! + +360:Velkommen til SJ3 og skihopping. +361:Her er ein rask introduksjon av spillet. +362:Poenget med skihopping er † hoppe s† langt +363:som mulig og lande uten † skade seg. +364:Hopperen din sitter p† bommen p† toppen +365:av bakken. Bruk h›gre piltast for † starte. +366:Vindm†leren er nede I venstre hj›rne av +367:skjermen. Vind I mot er best for det ›ker l›ftet. +368:N›kkelen til et suksessfult hopp er timingen av +369:take-off. Bruk piltast opp for † starte take-off. +370:Du skal n† rotere hopperen framover for † +371:minske luftmotstanden. Bruk h›gre piltast. +372:Av og til kan vinden kaste deg ut av balanse. +373:Bruk venstre piltast for † fikse posisjonen. +374:N†r bakken nermer seg vil det vere fornuftig † +375:tenke p† † lande hopperen trygt. +376:'T' tasten starter telemark landing. Det tar lengre +377:tid og er mer utrygt men gir bedre stilkarakterer. +378:'R' tasten starter den trygge to-fots landingen, +379:som er bra for lange hopp. +380:Det var det! Du kan se denne introen igjen fra +381:Reprise menyen og for mer info, les MANUAL.TXT. + +390:Toppen +391:Midten +392:Bunnen +393:Venstre +394:Midten +395:Høgre +396:Hopper + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Trenern: +401:Profesjonell +402:Pr›v † ikke la flygestillingen bli s† lav. +403:Bra Flygestilling i Lufta. +404:Flygestillingen din er for oppreist! +405:Land neste gang da. +406:Start landingen tidligere. +407:Uuh, uflaks. +410:Det var et d†rlig hopp. +411:Det ser fortsatt ikke bra ut. +412:Det var et brukbart hopp. +413:Bra hopping. +414:Nydelig hopp! +415:Utrolig! Er du Supermann? +418:Ta av fra hoppkanten mye tidligere. +419:Du tok av for seint. +420:Timingen er fortsatt ikke bra. +421:Bedre timing denne gangen. +422:Perfekt timing p† hoppkanten! +423:Du tok av litt for tidlig p† hoppkanten. +424:Ikke ta av s† tidlig. +425:Det var et forferdelig hopp. Ta av tidligere. +428:Jeg mener mye tidligere. +429:Det var akkurat for sent denne gangen. +430:Landingen var akkurat i tide. +431:Bra timing p† landingen. +432:Det vil gi deg gode stilpoeng. +433:Du kunne ikke ventet lengre f›r du landet. +434:Ikke v'r redd for † fly lengre. +435:Trykk 'T' eller 'R'!!! + +441:Avslappet +442:hh, du kan ikke lene deg s† mye bakover, kompis. +443:Fin flygeposition. +444:Ikke v'r redd for † lene deg lenger framover. +445:V'r s† snill † land neste gang da, det m† jo v're vondt. +446:Du lander fortsatt p† ansiktet, gutt. +447:Jaja, du kan ikke lande p† alle hoppene, veit du. +450:Der var du litt for avslappet. +451:Bra landing. +452:N† ser det bedre ut. +453:Det er hva jeg kaller fin flyging. +454:Jada, damene kommer til † like det hoppet! +455:Det var nydelig! Jeg vil at du skal m›te Superman! +458:Der bommet du totalt p† hoppkanten. +459:Hvis du vil fly, m† du ta av tidligere. +460:Timingen din er ikke helt perfekt. +461:Ganske bra timing ut i fra hoppet. +462:Hey, Der traff du perfekt! +463:Du tok av litt for seint der. +464:Ikke ha det travelt p† hoppkanten. +465:Ooh, du kommer til † skade deg en dag. +468:Du m† nok jobbe litt mer med landingen. +469:Er du ikke redd for † d›?.. +470:Wow, den landingen var p† kanten. +471:Landingen satt som en stein. +472:Ooh, Hr. Perfekt landing. +473:Den landingen var i siste sekund. +474:Ikke v'r redd for † fly lengre. +475:Tastaturet biter ikke. + +481:Streng +482:Du lener deg for langt frem, tosk. +483:Det er en brukbar flygestilling. +484:Pingle! Roter forover som en mann. +485:Herre Gud! Hvor er landingen da? +486:Nei! Start den forbanna landingen i tide! +487:Du kan n† fors›ke † hoppe da!!! +490:Jeg har aldri i mitt liv sett et d†rligere hopp. +491:Moren min hopper bedre enn det!. +492:Hva er feil? Vil du hjem til Mamma? +493:Du kan hoppe mye bedre enn det. +494:Enkelte trenere ville blitt glade for det. +495:N† hopper du som jeg har l'rt deg. +498:Forferdelig! N†r tok du av fra hoppkanten?! +499:Du tok av for sent. 50 armhevinger! +500:Timingen er fortsatt d†rlig. 25 armhevinger! +501:Kan du ikke ta av litt fortere da? +502:N† traff du slik jeg vil at du skal gj›re. +503:For tidlig! Kan du ikke l're? +504:Katastrofalt p† hoppkanten! Gi meg 50 armhevinger! +505:Jeg har aldri sett noen bomme slik p† hoppkanten som du gj›r. G† hjem. +508:Er landingen for vansklig, mammadalt? +509:Nei! Start landingen i tide! +510:Den landingen er for farlig. +511:Det s† nesten ut som en landing. +512:Det var en ok landing. +513:Ikke v'r redd n†r du skal lande. +514:Hva er du redd for?, fly da! +515:Er du dum? Land eller g† hjem! + + +*G +Slovenski +/Translated by Jaka Smolnikar a.ka The Ant + +/Basic Items +1:Ena +2:Dva +3:Tri +4:Stiri +5:Pet +6:Da +7:Ne +8:od +9:Brez +11:Registriran +12:Shareware +13:Normalno +14:Nizko +15:Pritisni tipko + +17:Glavni Menu +18:Skakalni Menu + +/Main Menu +20:Skoci! +21:Vpisi Skakalce +22:Setup Menu +23:Zid Slave +24:Rekordi +25:Posnetki +26:Zapri SJ3 + +27:SJ3 SP +28:SP Po Meri +29:Turneja 4ih Skakalnic +30:Mostveni Pokal +31:Kralj Skakalnice +32:Treniraj +33:Nazaj v Glavni Menu + +34:Skakalci: + +35:Ta verzija SJ3 +36:je Registrirana na: + +38:To je Neregistrirana +39:verzija SJ3. + +40:Preberi Register.Txt Takoj! + +41:Kako biti najbolj Cool +42:v svoji druzbi, + +43:Zelis dobiti malo Spostovanja +44:Od prijateljev? Registriraj SJ3! + +45:Ta igra ni Zastonj. +46:Bodi cool in Registriraj. +/46:Naredi pravo stvar in jo Registriraj. + +47:Samo dva Igralca dovoljena +48:v Neregistrirani verziji. + +/Other Items +51:Treniraj +52:Preiskusni Skok +53:Kvalifikacijski Skok +54:Prvi Skok +55:Drugi Skok +56:Naslednji... +57:Racunalniski skakalci... +58:Startno mesto: +59:Pritisni (S) za Setup Menu +60:S +61:Trenutno +62:Potrebno za Vodstvo +63:Potrebno za Zmago +65:Rekord Skakalnice +67:Ostali Skakalci: +68:Potrebno Premagati: +69:Trenutno Zadnji: +70:Trenutni vrstni red SP +71:Trenutni vrstni red MP +75:Zamudi naslednje +76:Runde +77:Runda +78:Runda +79:je Diskvalificiran! + +81:Razvrstitev - Runda +82:Kvalifikacije - Runda +83:od 4ih +84:Turneja Stirih Skakalnic - Runda +85:Koncni Razultati Turneje Stirih Skakalnic +86:(krajsa lista) +87:Razultati Po Rundi +88:Skakalec +89:Statistika Svetovnega Pokala za +90:Konci Razultat od + +91:Mostveni Razultati po Rundi +92:Koncni Razultati za Mostveni Pokal +93:Statistika Mosvenega Pokala za +94:Knock-out sistem pari +95:Razvrstitev +96:Kralj Skakalnice +97:Razultati +98:SP +99:stiri skakalnice: +100:Totalno: +101:Izven Tekmovanja: +102:Nic vec ne Skacejo: +103:Izpadli Skakalci: +104:V garderobi: +105:Nic vec med nami: +106:Kje? +107:Mostvo: +108:Poz +109:Toc +110:MP + +111:Pripravi se za Mostveni Pokal +112:Koledar Mostvenega Pokala: +113:Imenuje Mostvo +114:Mostvo + +115:Najboljsi razultat: +116:Nalozi Skakalnice po meri +118:Izberi Skakalnice za Svetovni Pokal po meri +117:Shrani Skakalnice po meri +119:Uporabi puscice, ENTER start, ESC izhod + + +120:Racunalniski Skakalci: +121:Zacni *Kralja Skakalnice* +122:Izberi Tezavnostno Stopnjo +123:Izberi Nasprotnike +124:Skakati v +125:Veter? +126:Skokov? +127:Nazaj v Glavni Menu +128:Novi rekord skakalnic po meri! +129:Stari rekord: + +130:Kralj S. Tezavnostna Stopnja +131:NAJVECJI IZIV +132:TEZKI PISKOTKI +133:LAHKA VARIANTA +134:LAHKO PREMAGAJOCI +135:UPOKOJENCI +136:MAJHNE PUNCKE V ROZA OBLEKCAH +137:PO MERI +138:Izberi Nasprotnike +139:Uporabi puscice pri izbiri Tezavnosti +140:ENTER izbere, ESC zapre +141:Ime +142:Cin +143:Kralj! + +/145:Vpisi Skakalce +146:(Uporabi Puscice, ENTER, DEL ali ESC) +/147:*Dodaj Igralca* +/148:Zapri +/149:Izberi Barvo Dresa +150:(Uporabi Puscice, ENTER ali ESC) + +151:Kje +152:Zelis Skakati +153:Danes? +154:Zapri +155:Nakljucnje Skakalnice SP +156:Vec Skakalnic... +157:Stran +158:Naslednja Stran +159:Prejsna Stran + +160:Kralj skakalnice +161:Ni koncano +162:Shranjeni najboljsi razultati skakalnic po meri +163:Razultati najboljsih 20 SJ3 v Svetovnem pokalu +164:Razultati najboljsih 10 v Mostvenem pokalu +165:Razultati najboljsih 5 v turneje stirih skakalnic +166:Ime +167:Poz +168:Tocke +169:Kdaj? +170:Rekordi +171:Kdo? +172:Koliko? +172:Koliko? +173:File +174:Pts +/173: +/Setup Menus +175:Setup Glavni Menu +176:To so Generalne Nastavitve +177:Nekaj Nastavitev glede Skakanja +178:Nekaj Nastavitev o Razultatih + +180:Oh Da +181:Seveda +182:Da! +183:Aha! +184:Ja +185:Oh Ne +186:Niti Slucajno +187:Ne +188:Nope +189:Nah + +190:Resetiraj +191:Nic +192:Najboljsi Razultati? +193:Preprican? +194:Pred brisanjem +/194: +195:Zapri Setup +196:Generalne Nastavitve +197:Skakalne Nastavite +198:Razultati in Setup Nastavitve +199:Tipke po meri +200:Nastavi cilje za rekorde +201:Naredi Skakalnico +/200:Urejevalnik Skakalnic + +203:Nazaj v Setup.Main +204:Jezik? +/203:Trenerski Stil? +205:Pisk? +206:Kvaliteta Grafike? +207:Imena Racunalniskih Skakalcev (NAMES?.SKI)? + +208:Stvari v sivem +209:so na voljo samo v Registrirani verziji. + +211:Nazaj v Main Setup +212:Preiskusni Skok? +213:Dodatna Statistika? +214:Pokazi razliko razultatov? +215:Pokazi razverstitev v SP po razlikah? +216:Kompaktni razultati? +217:Nevidni razultati? +/217:Predpreglej informacije o skakalnici? +/218:Vedno preskoci nepotrebne kvalifikacije? +/218:Izpusti Nepotrebne Kvalifikacije? +218:Avtomaticno Shrani Posnetek Rekordnega Skoka? +219:Pokazi cilje rekordov skakalnic? +220:Izberi gledane racunalniske skakalce? +221:Izberi mesto vetromera +/218:Koliko skalcev zelis gledati? +219:Pokazi cilje rekordov skakalnic? +220:Izberi gledane racunalniske skakalce? +221:Izberi mesto vetromera +222:Uporabi Knock-out-sistem v 4H? + +225:Zapusti Setup Najboljsih Razultatov +226:Ali Lahko Racunalniski Skakalec Skoci Rekord? +227:Dovoli Vec Istih Imen +228:Resetiraj Najboljse Razultate +229:Najboljsi Razultati na Nic +230:Vrni Navadne Nastavitve + +231:Nikoli +232:Ne v 4H +233:Vedno + + + +240:Nobenega +235:Vodilni +236:Prvi 3je +237:Prvih 5 +238:Prvih 10 +239:Vsi! + +242:Cilj +243:Uporabljaj puscice, ESC zapre +245:Ze Odhajas? +/Four letter words for the different lists +/246:PREV +/247:NEXT +/248:DONE +246:<-- +247:--> +248:OK + +251:Ze odhajas... +252:Ali res zelis oditi? +253:Oh, kam hitis? +256:Si preprican? +257:Si cisto preprican? +258:Pritisni D ce zelis oditi. + +261:Ahoy! Imeti moras stiri(4) +262:ali osem (8) igralcev prijavljenih +263:predno greste igrat Mostveni Pokal! +264:Pojdi poklicat prijatelje +265:ali pa se kloniraj 4-krat. + +270:SJ3 Urednik Skakalnic +271:(Uporabi puscice, DEL, +272: ENTER ali ESC) +273:Ime Datoteke +274:Ime Skakalnice +275:*Dodaj novo skakalnico* +276:-Exit- +277:-Start- +278:Testiraj skakalnico! + +280:Puscica Gor +281:Puscica Levo +282:Puscica Desno +283:Puscica Dol + +285:(L)oad set +286:(S)ave set +287:(R)andom set +288:Uredi po T(O)ckah SP +289:Uredi po Skupnih T(O)ckah + +290:Ne najde posnetkov! +291:Avtor: +292:Ime: +293:Ime datoteke: +294:Skakalnica: +295:Zapri, ne shrani +296:Zapri in shrani +298:(S)hrani posnetke + +300:Skakalci +301:Izberi skakalce +302:*Nov igralec* + +304:Ime: +305:Pravo Ime: +306:Barva Dresa: +307:Barva Smuci: +308:Zamenjaj: +309:Trener: +310:Preskoci Kvali: +311:Resetiraj Skakalca +312:Zapri + +313:Skupaj Skokov: +314:Svetovnih Prvenstev: +315:Zmag: +316:Svetovni Prvak: +317:Najboljsi na SP: +318:Najboljsi na 4ih Skakalnicah: +319:Najdaljsi Skok na SP: +320:Najdaljsi Skok: +321:KOTH tezavnost: + +322:(Uporabljaj puscice, +323:ENTER nastavi skakalca, +324:DEL izbrise iz seznama) +325:ENTER prijavi, +326:DEL izbrise skakalca) +328:Izbrisi Skakalca +329:Resetirajanje Skakalca + +330:Keymap +331:Odskok +332:Nagni naprej +333:Nagni nazaj +334:Telemark +335:Navaden pristanek +336:Vrni orig. nastavitve +337:Zapri + +340:Cas v zraku +341:Dolzina +342:Hitrost: +343:Po meri + +345:ze obstaja. +346:Prepisem? + +350:Posnetek je bil shranjen. +351:Posnetek ni bil shranjen. +352:Custom set je bil shranjen. +353:Custom set ni bil shranjen. +354:Ekstra skakalnica shranjena. +355:Ekstra skakalnica ni shranjena. +356:Ni nasel Custom Sets! + +360:Dobrodosli v SJ3 in v Skakalnem sportu. +361:Tukaj je hitra predstavitev te igre. +362:Ideja tega sporta je leteti cim dlje +363:je mozno in pristati brez poskodb. +364:Skakalec sedi na vrhu skakalnice. +365:Z pritiskom na puscico DESNO se spusti proti odskocni mizi. +366:Merilec vetra je postavljen v spodnji levi kot zaslona. +367:Veter obrnjen proti skakalcu poveca silo vzgona. +368:Kljuc do uspesnega skoka je timing odskoka in pristanka +369:S puscico GOR se odrinete. +370:Sedaj morata nagniti skakalca naprej da zmanjsate +371:zracni upor. To naredite z puscico LEVO. +372:Vcasih vas sunek vetra vrze iz pravilne pozicije +373:v zraku. Uporabite puscico LEVO da to popravite. +374:Ko se priblizujete zemlji je dobro pomisliti +375:na varen pristanek brez poskodb. +376:Tipka 'T' sprozi telemark pristanek. Je +377:pocasnejsi in nevarnejsi, vendar se pozna pri tockah za slog. +378:Tipka 'R' sprozi navaden pristanek, +379:ki je najbolj uporaben pri daljsih skokih. +380:To je to! Lahko si tudi ogledate posnetek +381:za vec informacij pa si preberite MANUAL.TXT. + +390:Vrh +391:Sredina +392:Dno +393:Levo +394:Center +395:Desno +396:Skakalec + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Trenerjev Kot: +401:Profesionalni +402:Ne nagni se tako nizko. +403:Dobra pozicija letenja. +404:Nagni se bolj med smuci. +405:Probaj pristati brez padca. +406:Prej zacni pristajati. +407:Uhh, kaksna smola, skoda! +410:To je slabo skakanje! +411:Se vedno ne zgleda dobro. +412:To je kar solidno. +413:Dober skok, bravo. +414:Odlicnoooo! +415:Neverjetno! Kje je pravzaprav tvoja meja? +418:Na mizi zacni prej. +419:Odskok je bil prepozen. +420:Timing na mizi je se vedno prepozen! +421:Tokrat je bilo bolje. +422:Perfekten odskok! +423:Na mizi si bil rahlo prezgoden. +424:Ne zacenjaj tako zgodaj. +425:To je bilo prezgodaj . +428:To pomeni ZELO prezgodaj. +429:Tokrat je bilo pac prepozno. +430:Komaj si se ujel pristanek. +431:V redu timing na pristanku. +432:To bi moralo dati dobre ocene. +433:Ne zacenjaj pristajati tako zgodaj. +434:Ne se bati leteti dalec. +435:Prosim pritisni 'T' ali 'R'. + +441:Sprosceno +442:Aw, ne nagni se prevec. +443:Prelepa pozicija v zraku. +444:Ne se bati nagniti nekoliko bolj, sine. +445:Prosim pristani naslednjic, to je boli. +446:Spet si pristal na glavo, misko. +447:Ves kaj, vse pa tud ne moras pristat. +450:To je prevec sprosceno. +451:To je... hmm, zanic. +452:To zgleda bolje. +453:Temu se rece lepo skakanje. +454:Ohh Jaaa, bejbe te ljubijo! +455:To je bilo dalec, Superman! +458:Kako len odskok... +459:Ce zelis leteti, odskoci prej. +460:Timing ni prav blestec. +461:Kar dober timing, misko. +462:Jaa, ljubim tvoj odskok! +463:Odskok je bil rahlo prekmalu. +464:Ne hiti z odskokom. +465:Ooh, nekega dne se bos se ubil. +468:Vec treninga na pristanku. +469:A se ne bojis da se bos ubil?.. +470:Uff, pristanek je bil na meji. +471:Pristanek - trd kot skala. +472:Ooh, Dr. Lep Pristanek. +473:Ne hiti z pristansko... +474:Ne se bati pri pristanku. +475:Ne se bat tipkovnice. + +481:Strogo +482:Prevec si nagnjen, bebec. +483:V redu letna pozicija. +484:Cura! Nagnji se kot moski. +485:Oh Bog! Kje je pristanek, cepec? +486:Ne Ne Ne! Zacni preklet pristanek pravocasno! +487:Zmigaj to debelo rit in pojdi na delo! +490:Nikoli nisem videl slabsega pristanka, pizda zresen se mal! +491:Moja praprababica skoci bolje kot ti! +492:Kaj je narobe? Hoces domov k svoji mamici v narocje? +493:To lahko naredis veliko bolje. +494:Nekateri trenerji bi bili zadovljni s tem. +495:Sedaj si skocil, kot sem ti rekel, cas je ze bil! +498:Zanic! Kje je preklet odskok! +499:Odskok je spet pozen. 50 sklec! +500:Timing je zanic. 25 sklec! +501:Ali ne mores odskociti nekoliko prej? +502:Koncno sem zadovoljen z odskokom. +503:Prekmalu! Se ne mores nauciti? +504:Katastroficen odskok! 50 sklec!! +505:Nisem se videl slabsega odskoka. Pejd domov! +508:Je pristanek pretezek, mamin sinko? +509:Ne! Zacni preklet pristanek pravocasno! +510:Pristanek je riskiran. +511:To je priblizno zgledalo kot pristanek. +512:Pomoje je tole bil kar dober pristanek. +513:Ne se usrat pri pristanku. +514:Cesa se bojis? Vleci, vleci! +515:Ali si prfuknen? Pristani ali pa pejd domov! + + +*H +Estonian +/Translated by Mikk Hein + +/Basic Items +1:ks +2:Kaks +3:Kolm +4:Neli +5:Viis +6:Ja +7:Ei +8:- +9:ei +11:Registreeritud +12:Vabavara +13:Normaalne +14:Madal +15:Vajuta nuppu... + +17:Pea Men +18:Hppe Men + +/Main Menu +20:Hppa! +21:Hppajate nimed +22:seaded +23:Kuulsuste palee +24:M„egede rekordid +25:Kordused +26:V„lju SJ3'st + +27:MK turnee +28:Ise valitud MK +29:4 Hppem„e Turnee +30:Meeskondlik MK +31:M„gede Kuningas +32:Harjutamine +33:Tagasi + +34:Hppajad: + +35:See versioon +36:on registreeritud: + +38:See on registreerimata +39:versioon! + +40:Loe Register.Txt'ti KOHE! + +41:Kuidas olla k6ige „gedam +42:kass oma naabruskonnas, + +43:Kuidas saada endale tunnustust +44:s6prade seas? Registreeri, kutt! + +45:See ei ole vabavara m„ng. +46:Tee 6ieti, registreeri. + +47:Ainult kaks m„ngijat on lubatud +48:registreerimata versioonis + +/Other Items +51:Harjuta +52:Treening hpe +53:Qualifikatsiooni voor +54:I voor +55:II voor +56:Valmistub... +57:Arvuti hpped... +58:Stardipoom: +59:Vajuta (S) Seadete men jaoks +60:S +61:Momendil +62:vajad koha s„ilitamiseks +63:vajad, et v6ita +65:M„erekord +67:Hppajaid j„„nud: +68:Vaja, et la: +69:K„esoleval hetkel viimane: +70:Praegune MK seis +71:Praegune Meeskondliku MK seis +75:J„„b vahele j„rgmine +76:etappi +77:voor +78:etapp +79:diskvalifitseeritud! + +81:Punktitabel - etapp +82:Qualifikatsioon - etapp +83:neljast +84:Nelja Hppem„e Turnee - Etapp +85:L6pp tulemused Nelja Hppem„e Turneel +86:(kompaktne nimekiri) +87:Tulemused p„rast eelmist etappi +88:Hppaja +89:Maailmakarika turnee statistika +90:L6pp tulemused + +91:meeskondlikud tulemused p„rast etappi +92:l6pptulemused meeskondlikus arvestuses +93:meeskondlik statistika +94:Knock-out system pairs + +95:j„rjestus +96:M„e kuningas +97:Punkt +98:MK +99:4m„ge: +100:kokku: +101:v6istlusetel v„ljas: +102:enam ei hppa: +103:k6rbenud hppajd: +104:riietuvad: +105:enam ei ole meiega: +106:kus? +107:meeskond: +108:Pos +109:Pun. +110:TC + +111:valmistuge v6istluseks +112:turnee plaan: +113:palun nimeta meeskond +114:Meeskond + +115:Parim tulemus: +116:Lae oma m„gede j„rjestus +118:vali m„ed alustamaks MK'd +117:salvesta oma m„gede j„rjestus +119:Kasuta nooli, ENTER alustab, ESC v„ljub + + +120:vastased: +121:Alusta *M„e kuningat* +122:Vali Raskus +123:Vali Vastased +124:Hppamine: +125:Tuul? +126:Voorud? +127:Tagasi +128:Uus oma m„gede j„rjestuse rekord! +129:Vana Rekord: + +130:M.k raskus: +131:Viimasepeal klemmid +132:rasked kpsetised +133:NOrmaalsed klemmid +134:T„ielikult l””davad +135:vanadekodu +136:v„ikesed tdrukud +137:tagasi +138:vali oma vastased +139:kasuta nooli, tainas!!! +140:ENTER valib, ESC v„ljub +141:Nimi +142:Koht +143:kunn!!! + +/145:kirjuta hppajate nimed +146:(Kasut. nooli, ENTER, DEL v6i ESC) +/147:*Lisa m„ngija* +/148:tagasi +/149:Vali kombe v„rv +150:(Use arrows, ENTER or ESC) + +151:Kus sa tahad +152:hpata +153:T„na? +154:V„lju +155:erinev MK +156:Veel m„gesid... +157:leht +158:J„rgmine leht +159:eelmine leht + +160:M„gede kuningas +161:L6petamata +162:Salvestatud Oma M„e parimad +163:Top 20 SJ3 MK tulemused +164:Top 10 Meeskondlikud tulemused +165:Top 5 4m„e punktid +166:Nimi +167:Pos +168:Punkt. +169:millal? +170:M„erekordid +171:Kes? +172:Kui palju? +173:Fail +174:Pun +/173: +/Setup Menus +175:seaded +176:ldised seaded +177:Hpete seaded +178:Rekordite seaded + +180:jah +181:jah +182:jah +183:jah +184:jah +185:ei +186:ei +187:ei +188:ei +189:ei + +190:Thista +191:Nulli +192:max punktid? +193:oled kindel? +194:About to delete +/194: +195:lahku +196:ldised seaded +197:Hpete seaded +198:Rekordite seaded +199:Personaliseeri nupud +200:sea rekordite norm +201:M„e valmistaja +/200:Ei tea + +203:tagasi +204:Keel? +/203:6petus stiil? +205:hoiatus h„„led? +206:Graafilised detailid? +207:vastaste nimede paigutamine (names?.ski)? + +208:Hallid asjad on k„ttesaadavad +209:registreeritud versioonis + +211:tagasi +212:Treening voorud? +213:Extra Statistika? +214:punktitabelid kaotuse j„rgi? +215:n„ita MK tulemusi kaotuse j„rgi? +216:kompaksed tabelid? +217:n„htamatu punktitabel taustaks? +/217:n„ita m„e andmeid? +/218:j„ta vahele mittevajalik gualifikatsioon? +218:Automaatne rekordhppe korduse salvestamine? +219:n„idata rekordite norme? +220:vali n„idatavad arvuti hppajad? +221:vali tuulelipu asukoht +/218:vaata arvuti vastaseid? +222:kasuta v„lja kukkumis ssteemi neljal m„el? + +225:lahku +226:arvuti hppab rekordeid? +227:nimede kordamine lubatud? +228:kustuta rekordid +229:nulli rekordid +230:taasta normaal tingimused + +231:mitte kunagi +232:ei ole 4m +233:Alati + +240:htegi +235:Liidrit +236:Top 3'me +237:Top 5'te +238:Top 10'et +239:k6iki! + +242:eesm„rk +243:kasuta nooli, ESC v„ljub +245:Lahkud juba? +/Four letter words for the different lists +246:eelm +247:j„rg +248:k6ik + +251:no sa siis lahkud... +252:kas t6esti tahad lahkuda? +253:Oh, nii kiiresti lahkud? +256:oled sa selles kindel? +257:oled sa t„iesti kindel? +258:tle jah kui lahkud. + +261:Ahoi! sul peab olema neli (4) +262:v6i kaheksa (8) m„ngijat +263:enne meeskondliku v6istlust! +264:mine kutsu s6pru hinema sinuga +265:v6i klooni ennast nelja korda. + +270:SJ3 m„e valmistaja +271:(kasut. nooli, DEL, +272: ENTER v6i ESC) +273:Failinimi +274:m„enimi +275:*lisa uus m„gi* +276:-lahku- +277:-alusta- +278:Testi oma m„ge! + +280:Nool les +281:nool Vasakule +282:nool paremale +283:nool alla + +285:(L)oad set +286:(S)ave set +287:(R)andom set +288:S(O)rteeri MK punktide j„rgi +289:S(O)rteeri Kogu punktide j„rgi + +290:htegi kordust ei leitud! +291:Autor: +292:Nimi: +293:Failinimi: +294:M„gi: +295:V„lju, „ra salvesta +296:v„lju ja salvesta +298:(S)alvesta kordus + +300:Hpaja +301:vali hppajad +302:*loo uus hppaja* + +304:Nimi: +305:P„risnimi: +306:kombe v„rv: +307:Suuskade v„rv: +308:asenda: +309:treener: +310:J„ta kvali: +311:kustuta hppaja +312:v„lju + +313:kogusumma hppeid: +314:Mk-sid l6petanud: +315:voore v6itnud: +316:etappe v6itnud: +317:Parim MK tulemus: +318:parim 4hppem„e turnee tulemus: +319:pikim mk hpe: +320:pikim hpe: +321:KOTH tase: + +322:(kasuta nooli, +323:ENTER muudab hppajat, +324:DEL kustutab j„rjekorrast) +325:ENTER registreerib, +326:DEL kustutab hppaja) +328:kustuta hppaja +329:taasta hppaja + +330:NUPPUDE plaan +331:„rat6uge +332:keerab edasi +333:keerab tagasi +334:Telemark maandumine +335:kahejalaga maandumine +336:taasta orginaalid +337:v„lju + +340:Hangtime +341:pikkus +342:kiirus: +343:tavaline + +345:juba olemas. +346:üle kirjutada? + +350:korduse fail salvestatud ok. +351:korduse faili ei salvestatud. +352:j„rjestus salvestatud. +353:j„rjestus salvestamata. +354:Extra m„e salvestamine OK. +355:Extra m„e salvestamine eba6nnestus. +356:j„rjestusi ei leitud! + +360:tere tulemast SJ3 ja suusahpete maailma. +361:siin on kiire tutvustus m„ngule. +362:Selle spordi idee on lennata v6imalikult +363:kaugele end vigastamata. +364:sinu hppaja istub poomil enne hoov6ttu +365:kasuta paremat noolt alustamaks hoov6ttu. +366:tuulelipp on alumises vasakus ekraani nurgas +367:vastu tuul on parem kuna see lennutab kaugemale. +368:ideaalse hppe v6ti on „rat6ukes. +369:kasuta les noolt „rat6ukeks. +370:nd pead meest ette kallutama et +371:v„hendada tuule takistust. kauta paremat noolt. +372:vahetevahel v6ib tuulepuhang sind tasakaalust +373:v„lja viia. kasuta vasakut noolt et parandada positsioon. +374:kui hakkad maale l„hedale j6udma siis alusta +375:m6tlemist sellele kuidas ohutult maanduda. +376:'T' nupp alustab telemark maandumist. mis on +377:aeglasem ja ohtlikum kuid stiili poolest kasulikum. +378:'R' nupp alustab ohutumat jalad koos maandumist, +379:mis on kasulik pikkadel hpetel. +380:See on k6ik! sissejuhatust saad vaadata uuesti +381:Korduste men alt ja rohkem infot saad MANUAL.TXT lugedes. + +390:lemine +391:keskmine +392:alumine +393:vasak +394:keskel +395:parem +396:hppaja + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Treeneri nurk: +401:kutsealane +402:„ra lase lennu positsiooni nii alla. +403:hea positisoon lennus. +404:sinu lennu positsioon on liiga pstine. +405:Maandu ka j„rgmine kord! +406:alusta maandumist varem. +407:kehvasti see kord. +410:See on v„ga vilets hppamine. +411:See ei ole ikka veel hea. +412:See oli peaaegu hea hpe. +413:Hea hpe. +414:viimasepeal hpe! +415:Uskumatu! Kus on sinu maapind? +418:Alusta t6uget varem. +419:T6uge oli liiga hilja. +420:Seekord oli parem kuid ikka hilja. +421:parem ajastus seekord. +422:ideaalne ajastus t6ukel! +423:liiga varajane t6uge. +424:„ra alusta t6uget nii vara. +425:see oli 6udne t6uge! alusta ikka palju varem!!! +428:ma m6tlesin sitaks varem! +429:sel korral oli see liiga hilja. +430:maandumine oli viimasel hetkel. +431:paras ajastus maandumisel. +432:see peaks andma sulle head punktid. +433:sa peaksid kauem ootama maandumisega. +434:„ra karda lennata kauem. +435:maandumisel vajuta R-nuppu v6i t-nuppu! + +441:Vaba +442:„ra nd le keera seda hpet. +443:see on armas lennu positsioon. +444:pojake, „ra karda ettepoole pisut n6jatuda . +445:palun maandu j„rgmine kord, muidu on valus. +446:poiss, sa ikka maandud oma larfile. +447:okei sa ei suuda neid k6iki taluda. +450:see oli nd liiga vabaks lastud. +451:Jah, pa mitte murda rasket t””d. +452:see paistab juba pisut hppe moodi. +453:vot see on hpe mida ma kutsub lendamiseks. +454:oh jah! vot see juba beibedele meeldib! +455:see oli vinge! ma tahaks tutvustada uut superman'i! +458:milline paksperse, v6iks t6ugata ka... +459:kui tulid siia lendama siis t6uka ka varem. +460:sinu ajastus ei ole kogu aeg nii hea. +461:hei! vot sellisne t6uge juba l„heb! +462:Hei, ma lihtsalt armastan sinu „rat6uget! +463:t6uge oli natukene vara. +464:„ra kiirusta t6ukega. +465:nii sa veel vigastad ennast kunagi. +468:sa peaksid rohkem t””tama maandumise kallal. +469:kas sa ei karda surma??? +470:see maandumine oli kll „„repeal. +471:maandumine - Soliidne nagu rock. +472:Oh Mr.hea maanduja tuli linna. +473:„ra kiirusta selle maandumise tunnetamisega +474:„ra karda hiljem maanduda +475:„ra karda klaviatuuri jobu! + +481:n6udlik +482:saa oled lennu ajal liiga ees! +483:see on juba viisaks asend. +484:p””ra hpet nagu mees! +485:oi mu kallis saatan! kus on su maandumine? +486:ei! alusta seda kuradi maandumist 6igel ajal! +487:t6sta oma perse psti ja mine tagasi t””le! +490:ma pole iial n„inud hullemat hppajat, kui sina! +491:mu ema hppab ka paremini kui sina. +492:mis viga? tahad koju emme juurde, mis? +493:sa suudad paremini kui see oli. +494:m6ned treenerid oleksid r66msad selle le. +495:alles nd hppad nagu ma sulle 6petasin. +498:6udne! kus on see kuradi t6uge! +499:t6uge oli hilja j„lle! 50 k„ttek6verdust!!! +500:ajastus on ikka pask! 25 k„ttek6verdust!!! +501:kas sa ei suuda siis varem t6ugata? +502:nd oli see t6uge mida ma ootasin. +503:liiga vara! kas sa ka kunagi ei 6pi? +504:hull t6uge! 50 k„ttek6verdust!!! +505:ma pole iial n„inud hullemat t6uget. mine koju!!! +508:kas maanumine on siis nii raske? +509:ei! alusta seda kuradi maandumist 6igel ajal! +510:see maandumine oli liiga riskantne. +511:see oli juba peaaegu maandumine. +512:ma arvan, et see oli p„ris hea maandumine. +513:oota pisut selle maandumisega. +514:mid sa kardad? lenda kurat v6taks! +515:oled sa lollakas? maandu v6i mine koju! + + +*I +Cesky +//Translated by Jan Habrdle (v3.00), +//Michal Hapala and Boleslav Kristen + +/Basic Items +1:Jedna +2:Dve +3:Tri +4:Ctyri +5:Pet +6:Ano +7:Ne +8:z +9:Zadny +11:Registrovany +12:Shareware +13:Normalni +14:Nizke +15:Stiskni klavesu ... + +17:Hlavni Menu +18:Nabidka skoku + +/Main Menu +20:Skakej! +/21:Zapis skokany +/21:Profily +21:Zapis skokany +22:Nastaveni +23:Hala slavy +24:Rekordy mustku +25:Zaznam +26:Ukonci SJ3 + +27:SJ3 Svetovy pohar +28:Vlastni pohar +29:Turne ctyr mustku +30:Teamovy Pohar +31:Kral mustku +32:Trenink +33:Zpet do hl. menu + +34:Skokani: + +35:Tato verze +36:je registrovana: + +38:Toto je neregistrovana +39:Verze SJ3. + +40:Precti si Readme.txt + +41:Stan se nejvetsim frajerem ! +42:Zaregistruj se, clovece ! + +43:Ziskej respekt svych pratel ! +44:Zaregistruj se, clovece ! + +45:Tahle hra neni freeware +46:Proto se rychle zaregistruj. + +47:V neregistrovane verzi +48:mohou hrat jenom dva hraci + +/Other Items +51:Trenink +52:Treninkove kolo +53:Kvalifikacni kolo +54:Prvni kolo +55:Druhe kolo +56:Dalsi na mustku ... +57:Skace pocitac... +58:Startovni branka: +59:Zmackni (N) pro nastaveni +60:N +/item 60 marks the letter that activates the setup menu +61:Aktualne +62:K vedeni +63:K vitezstvi +65:Rekord mustku +67:Zbyva skokanu: +68:Potrebujes prekonat: +69:Zrovna posledni: +70:Aktualni vysledky SP +71:Aktualni vysledky TP +75:Zranen na pristi +76:Skoky +77:Kolo +78:Skok +79:je diskvalifikovan! + +81:Vysledky - Skok +82:Kvalifikace - Skok +83:ze 4 +84:Turne Ctyr Mustku - Skok +85:Konecne vysledky turne ctyr mustku +86:(kompaktni seznam) +87:Vysledky po skoku +88:Skokan +89:Stat. ze Sv. Poharu pro +90:Konecne vysledky z + +91:Vysledky Team. Poharu pro skok +92:Konecne vysledky Teamoveho Poharu +93:Stat. z Team. Poharu pro +94:KO system razeni +95:Postaveni +96:Kral mustku +97:Skore +98:SP +99:4 Mustky: +100:Kompletne: +101:Vyrazen ze souteze: +102:Nepostupujici: +103:Neopstupujici skokane: +104:V satnach: +105:Uz nejsou mezi nami: +106:Kde ? +107:Team: +108:Pos +109:Bod +110:TP + +111:Pripravte se na Teamovy Pohar +112:Plan pro Teamovy Pohar: +113:Prosim pojmenujte tym +114:Tym +115:Nejlepsi vysledky: +116:Nacti "Vybrane Mustky" +117:Uloz "Vybrane Mustky" +118:Vyberte mustky pro vas svet. pohar +/119:Use Arrows, ENTER chooses, ESC starts +119:Pouzij Sipky, ENTER:Zacni, ESC:Ukonci + +120:Skokani ovl. pocitacem: +121:Zacni *Kral mustku* +122:vyber uroven obtiznosti +123:vyber protivniky +124:Skakat v +125:Vitr ? +126:Kola ? +127:Zpet do Hl. Menu +128:Novy rekord pro "Vybrane Mustky" +129:Stary rekord: + +130:K.O.T.H Stupen obtiznosti +131:Pro mistry sveta +132:Jses dobry? +133:Pro skoro dobre +134:Pro slabe +135:Domov duchodcu +136:Pro male divenky +137:Volitelny +138:vyber si sve protivniky +139:pouzij sipky k zvoleni obtiznosti +140:ENTER - vyber, ESC - odejdi +141:Jmeno +142:Poradi +143:Kral! + +145:Zapis skokany +146:(Pouzij sipky, ENTER, DEL nebo ESC) +147:*Pridej Hrace* +148:Exit +149:Vyber si barvu kombinezy +150:(Pouzij sipky, ENTER nebo ESC) + +151:Kde +152:chces skakat +153:dnes ? +154:Konec +155:Nahodny mustek SP +156:Vice mustku... + +157:Stranka +158:Dalsi stranka +159:Predchozi stranka + +160:Soutez Kral mustku +161:Neni dokoncena +162:Nejlepsi skoky ve "Volitelnych Mustcich" +163:Top 20 SJ3 Vysledku SP +164:Top 10 Vysledku TP +165:Top 5 Turne Ctyr Mustku +166:Jmeno +167:Pos +168:Body +169:Kdy? +170:Rekord mustku +171:Kdo? +172:Kolik? +173:Soubor +174:Body +/Setup Menus +175:Nastaveni +176:Obecne nastaveni +177:Nastaveni skoku +178:Nastaveni Hiscore + +180:Oh, Ano +181:jiste +182:Ano Pane +183:Jo +184:Jasne +185:Ale Ne +186:Nikdy +187:Negativni +188:Ne +189:Neeee + +190:Resetuj +191:Vynuluj +192:Highscore ? +193:Jste si jist? +194:Chystam se vymazat +195:Opust nastaveni + +196:Obecne nastaveni +197:Nastaveni skoku +198:HiScore a moznosti nastaveni +199:Nastaveni klaves +200:Nastav cile pro rekordy mustku +201:Editor mustku +202:Manazer mustku +/202:Hill Manager + + +203:Zpet to hlavniho menu +204:Jazyk? +205:Pipnuti? +206:Graficky detail? +207:Soubor se jmeny protivniku (NAMES?.SKI)? + +208:Sede polozky jsou dostupne +209:pouze v registrovane verzi + +211:Zpet do hlavniho nastaveni +212:Treninkova kola? +213:Extra statistiky? +214:Ukazovat vysledky s diferencemi ? +215:Ukazovat vysledky SP s diferencemi ? +216:Zuzena vysledkova listina? +217:Neviditelne pozadi vysledku? +/218:Vzdy preskoc zbytecnou kvalifikaci? +/218:Preskocit zbytecnou kvalifikaci? +218:Automaticky ukladat replaye rekordu? +219:Ukaz cile mustku? +220:Kolik protivniku chces sledovat? +221:Urci misto pro Mereni vetru +222:Pouzit KO system v Turne 4 Mustku? + +225:Opust Nastaveni Hiscore +226:Maji se zapsat rekordy protivniku? +227:Dovol vice totoznich jmen na seznamu +228:Resetovat Hiscores +229:Nulovovat Hiscores +230:Vratit na zakladni nastaveni + +231:Nikdy +232:Ne v T4M +233:Vzdy + +240:Zadny +235:Vedouci +236:Nejlepsi 3 +237:Nejlepsich 5 +238:Nejlepsich 10 +239:Vsechny! + +242:Ukol +243:Pouzij sipky, ESC:Ukonci + +245:Uz odchazis? +/Four letter words for the different lists +246:PRED +247:DALS +248:UKON + +251:Takze odchazis... +252:Opravdu chces odejit? +253:Ale, odchazis takhle brzo? +256:Jses si tim uplne jisty? +257:Jses si absolutne jisty? +258:Zmackni A pro konec. + +261:Ahoj! Musis mit ctyri (4) +262:nebo osm (8) prihlasenych hracu +263:pred startem Teamoveho poharu +264:Jdi rict svym pratelum +265:nebo se proste ctyrikrat naklonuj + +270:SJ3 Tvorba Mustku +271:(pouzij sipky, DEL, +272: ENTER nebo ESC) +273:Jmeno souboru +274:Jmeno mustku +275:*Pridej novy mustek* +276:-Konec- +277:-Start- +278:Vyzkousej svuj mustek! + +280:Sipka Nahoru +281:Sipka Doleva +282:Sipka Doprava +283:Sipka Dolu + +285:(N)ahrat +286:(U)lozit +287:N(A)hodny seznam +288:(S)erad podle SP bodu +289:(S)erad podle Celkovych bodu + +290:Nebyli nalezeny zadne zaznamy! +291:Autor: +292:Jmeno: +293:Jmeno souboru: +294:Mustek: +295:Konec, neukladat +296:Konec, a ulozit +/The second letter is the key that will save the replay +298:(U)loz zaznam + +300:Skokani +301:Zvol skokany +302:*Vytvor noveho skokana* + +304:Jmeno: +305:Skutecne Jm. +306:Barva obleku: +307:Barva lyzi: +308:Vymen: +309:Trener: +310:Preskoc Q. +311:Resetuj skokana +312:Konec + +313:Skoku celkove: +314:Dokonceno Svetovych Poharu: +315:Kol vyhrano: +316:Svetovych vyhrano: +317:Nej. vysledek SP: +318:Nej. vysledek v T4M: +319:Nejdelsi SP skok: +320:Nejdelsi skok: +321:KOTH uroven: + +322:(Pouzik sipky, +323:ENTER upravi skokana, +324:DEL odstrani z poradi) +325:ENTER zapise, +326:DEL vymaze skokana) + +328:Vymazani skokana +329:Zresetovani skokana + +330:Nastaveni klaves +331:Odraz +332:Dopredu +333:Dozadu +334:Telemark +335:Pristani na obe nohy +336:Vratit zakladni nastaveni +337:Odejit + +/Still some replay stuff +340:Cas skoku +341:Delka skoku +342:Rychlost: +343:Volitelne + +345:jiz existuje. +346:Prepsat? + +350:Zaznam byl ulozen. +351:Zaznam nebyl ulozen. +352:Volitelne nastaveni bylo ulozeno. +353:Volitelne nastaveni nebylo ulozeno. +354:Extra mustek byl ulozen. +355:Extra mustek nebyl ulozen. +356:Nebyly nalezeny zadne volitelne nastaveni! + +/Intro +360:Vitejte do SJ3 a sveta skoku na lyzich. +361:Toto je rychly uvod do hry. +/361:This is a quick introduction to the game. + +362:Cilem tohoto sportu je doletet co +363:nejdale a dobre pristat. + +364:Vas skokan sedi na lavicce na zacatku +365:najezdu. Pouzijte sipku Doprava na rozjezd. + +/366:The wind meter is located at the bottom left of the +/367:screen. Head wind is better as it increases lift. + +366:Meric vetru je umisten na levem spodnim rohu obrazovky. +367:Protivitr je lepsi protoze zvysuje vztlak. + +368:Klicem k dobremu skoku je vcas se odrazit. +369:To provedete sipkou Nahoru. + +370:Ted by jste meli skokana natocit co nejvice doprava +371:pro snizeni odporu vetru. Pouzijte sipku Doprava. + +372:Nekdy se stane ze vas vzdusny vir vyhodi z +373:rovnovahy. Na opravu pouzijte sipku Doleva. + +374:Jak se zacne blizit zem bylo by moudre pripravit +375:se na hladke pristani. + +376:Klavesa T provede Telemark. Je pomalejsi a nebezpecny +377:ale toto se vam vrati v bodech za styl. + +378:Klavesa R provede doskok na obe nohy, je bezpecny a +379:nejvice by se mel pouzivat u velmi dlouhych skoku. + +380:A to je vsechno ! Navod si muzete znovu prohlednout +381:z menu Zaznam. Manual je obsazen v souboru manual.txt. +/382:Happy jumpin'! + +390:Horni +391:Stredni +392:Dolni +393:Levy +394:Stredni +395:Pravy +396:Skokan + +/Coaching +//The First One 401, 441, 481.. Indicates the Coaching Style +400:Treneruv nazor: +401:Profesional + +402:Jsi moc zakloneny. +403:Dobra letova pozice. +404:Moc se naklanis dopredu. +405:Priste prosimte pristan. +406:Zacni drive pristavat. +407:Aaale, to byl smula. +410:To je ale spatny skok. +411:Stale to jeste nevypada dobre. +412:Tenhle skok by uz docela sel. +413:Dobry skok. +414:Vyborny skok! +415:Neuveritelne! Kdes nechal plast? +418:Odraz se daleko drive. +419:Moc pozde jsi se odrazil. +420:Hmm, stale se odrazis spatne. +421:Priste to lip nacasuj. +422:Skvele nacasovany odraz! +423:Odrazil ses moc brzy. +424:Neodrazej se tak brzo. +425:Tak to je byl opravdu spatny odraz. Odraz se mnohem pozdeji. +428:Hmm, myslel jsem to o dost driv. +429:Tentokrat to bylo moc pozde. +430:Hmm, odraz uz byl skoro v poradku. +431:Odraz byl v poradku. +432:To by mohly byt slusne body za styl. +433:Na pristani jeste bylo dost casu. +434:Neboj se letet dal. +435:Priste stiskni 'T' nebo 'R', ok?. + +441:Pohodar + +442:Ee, nepretacej se, chlape. +443:Letova pozice je v pohode. +444:Neboj se vic naklonit, synku. +445:Sakra to musi bolet, priste zkus pristat. +446:Porad pristavas na drzce, chlapce. +447:Sakra smula, chlape. +450:To bylo az moc pohodarsky. +451:Aby ses nezapotil. +452:Uz to zacina vypadat dobre. +453:Tak tomuhle ja rikam dobrej let. +454:Super, tohle zensky zerou! +455:To je husty! Nepotkals tam Supermana? +458:Pekne debilni odraz! +459:Jestli chces letet, odraz se driv. +460:Nacasovani stoji pekne za backoru. +461:Tentokrat to byl dobrej odraz. +462:Hej, takovejhle odraz zeru! +463:Ted ses odrazil jen o chvili driv nez mel. +464:Nespechej s tim odrazem. +465:Ooo, takhle si jednou rozbijes drzku. +468:Na tom pristani by si mel asi zamakat. +469:To se nebojis ze umres??. +470:No fuj, to pristani bylo dost na hrane. +471:Pristani - Stabilni jak skala. +472:Joo, Pan mekky dopad je tady nekde. +473:Jestes mel dost casu na pristani. +474:Priste se neposer a let dal. +475:Neboj se klavesnice, chlape. + +481:Striktni +482:Moc se naklanis, panaku. +483:To je slusna letova pozice. +484:Srabe! Skakej jako chlap! +485:Muj boze! Kam se podelo pristani? +486:Ale ne! Zacni pristavat vcas. +487:Zvedni prdel a zpatky do prace! +490:Tohle je nejhorsi skok co jsem kdy videl. +491:Moje matka skace lip nez ty! +492:Neco se stalo? Chces zpatky k mamince? +493:Furt mas jeste rezervu. +494:Nektery trenery by s tim byli spokojeni. +495:Konecne skok jak jsem te ucil. +498:Strasny! Kde je ten zatracenej odraz? +499:Zase ses spatne odrazil! 50 kliku! +500:Stale mas spatne nacasovani! 25 kliku! +501:Mohl by ses driv odrazit? +502:Ted ses odrazil jak jsem chtel. +503:Moc brzo! Ty se to asi nikdy nenaucis? +504:Katastrofalni odraz! 50 kliku! +505:Jeste jsem nevidel horsi odraz. Radsi jdi domu. +508:To je to pristani tak tezke, mazanku? +509:Ne! Zacni pristavat vcas! +510:To bylo moc riskatni pristani. +511:To uz skoro vypadalo jako pristani. +512:Myslim si ze tohle pristani bylo v poradku. +513:Nespechej na to pristani. +514:Ceho se bojis? Let, xakru! +515:Ses debilni? Let,nebo se vrat domu! + + + +*J +Francais +//Translated by Cyril Koechlin +//Fixed by Caroline Fedry + +/Basic Items +1:Un +2:Deux +3:Trois +4:Quatre +5:Cinq +6:Oui +7:Non +8:de +9:Aucun +11:Enregistre +12:Shareware +13:Normal +14:Bas +15:Appuyez sur une touche... + +17:Menu Principal +18:Menu du saut + +/Main Menu +20:Sauter! +21:Noms des Sauteurs +22:Configuration +/23:Tableau des records +23:Records +24:Records des sauts +25:Ralentis +26:Sortie SJ3 + +27:Coupe du Monde +/27:Coupe du Monde Perso +28:C. du Monde Perso +/28:Tournee des 4 Tremplins +29:Tournee des 4 Tr. +30:Coupe par Equipe +31:Roi du Tremplin +32:Entrainement +33:Retour + +34:Sauteurs: + +35:Cette version +36:a ete enregistree par: + +38:Ceci est une version +39:non enregistree de SJ3. + +40:Lis Register.Txt ! + +41:Comment etre le gars le plus cool +42:du voisinage, + +43:Tu veux gagner le respect +44:de tes amis? Enregistre-toi, mec! + +45:Ceci n'est pas un jeu freeware. +46:Rentre dans le droit chemin, enregistre-toi. + +47:2 Joueurs seulement ! +48:c'est une version non enregistree + +/Other Items +51:Essai +52:Entrainements +53:Qualifications +54:Manche 1 +55:Manche 2 +56:Suivant... +57:L'ordi saute... +58:Depart: +59:(S) pour configurer +60:S +61:Pour le moment +62:Pour mener +63:Pour gagner +65:Record +67:Sauteurs a venir: +68:Pour passer devant: +69:Actuellement dernier: +70:Classement CM provisoire +71:Classement CE provisoire +75:Va rater +76:Etapes +77:La manche suivante +78:L'étape suivante +79:est disqualifie! + +81:Tableau des Scores - Etape +82:Qualifications - Etape +83:de 4 +84:Tournee des 4 Tremplins - Etape +85:Resultats finaux de la Tournee des 4 Tremplins +86:(liste compacte) +87:Classement apres Etape +88:Sauteur +89:Stats de Coupe du Monde pour +90:Resultats finaux de + +91:Classement de la Coupe par Equipe apres +92:Resultats finaux de la Coupe par Equipe +93:Stats de la Coupe par Equipe pour +94:Systeme d'elimination directe +95:Classement +96:Roi du Tremplin +97:Score +98:CM +99:4 Tremplins: +100:Total: +101:Elimine: +102:Ne sautent plus: +103:Sauteurs elimines: +104:Deja aux vestiaires: +105:Plus parmi nous: +106:Ou ? +107:Equipe: +108:Pos +109:Pts +110:CE + +111:Pret pour la Coupe par Equipe +112:Calendrier de la Coupe par Equipe: +113:Nom de l'Equipe +114:Equipe + +115:Meilleur resultat: +116:Charger serie perso +118:Selectionnez les tremplins: +117:Sauver serie perso +119:Utilise les fleches, ENTER commence, ESC sort + + +120:Sauteurs de l'ordinateur: +121:Commencer *Roi du Tremplin* +122:Selectionner le niveau +123:Choisir les adversaires +124:Sauter a +125:Vent ? +126:Manches ? +127:Retour +128:Nouveau record pour cette CM perso! +129:Ancien record: + +130:Niveau +131:LE CHALLENGE ULTIME +132:DUR A AVALER +133:SERAS-TU A LA HAUTEUR ? +134:SUREMENT BATTABLE +135:POUR LES VIEUX +136:PETITES FILLETTES +137:PERSO +138:Selectionne tes adversaires +139:Utilise les fleches pour le niveau +140:ENTER valide, ESC exit +141:Nom +142:Classement +143:The King! + +/145:Noms des Sauteurs +146:(Utilise les fleches, ENTER, DEL ou ESC) +/147:*Ajouter Joueur* +/148:Sortir +/149:Choisir la couleur de ta Combi +150:(Utilise les fleches, ENTER ou ESC) + +151:Ou veux-tu +152:Sauter +153:Aujourd'hui? +154:Sortir +155:Hasard +156:Plus de tremplins... +157:Page +158:Page suivante +159:Page precedente + +160:Roi du tremplin +161:Non reussi +162:Records des CM perso sauvegardees +163:Top 20, Resultats de la Coupe du Monde SJ3 +164:Top 10, Resultats de la Coupe par Equipe +165:Top 5, Scores de la Tournee des 4 Tremplins +166:Nom +167:Pos +168:Points +169:Quand? +170:Les Records +171:Qui? +172:Combien? +172:Combien? +173:Fichier +174:Pts +/173: +/Setup Menus +175:Configuration Generale +176:Menu des Options Generales +177:Quelques options pour le saut +178:Quelques options pour les records + +180:Oh Oui +181:Sur +182:Oui Chef +183:Yep +184:Ouais +185:Oh Non +186:Pas Question +187:Negatif +188:Nope +189:Naah + +190:Reset +191:A Zero +192:les Scores? +193:Es-tu sur? +194:About to delete +/194: +195:Sortir +196:Options generale +197:Options de saut +198:Options de configuration +199:Changer les touches +200:Changer le but du tremplin +201:Editeur de tremplin +/200:Manageur de tremplin + +203:Retour +204:Langue ? +/203:Style d'Entraineur ? +205:Bips ? +206:Niveau de detail ? +207:Noms des adversaires (NAMES?.SKI)? + +208:Options grisees uniquement +209:disponibles dans version Enregistree + +211:Retour +212:Entrainements? +213:Plus de Stats? +214:Tableau des Scores en Difference? +215:Montre les classements CM avec difference? +216:Tableau des Scores Resumes? +217:Arriere-plan Tableau des Scores Invisible? +/217:Montrer les carcteristiques du tremplin? +/218:Ne pas faire les Qualifs inutiles? +/218:Eviter qualifs inutiles? +218:Auto sauvegarde ralentis des records de tremplin? +219:Egale le but du tremplin? +220:Selectionne les sauteurs de l'ordi vus? +221:Change la place de l'anemometre +/218:Regarder combien d'Adversaires? +219:Egale les buts des records du tremplin? +220:Selectionne les sauteurs de l'ordi vus? +221:Change la place de l'anemometre +222:Utiliser elimination directe pour les 4T? + +225:Sortir +226:L'ordi peut battre les records? +/227:Autoriser plusieurs noms de joueurs identiques? +227:Plusieurs noms identiques? +228:Scores par Defaut +229:Scores a Zero +230:Retour vers valeurs par defaut +231:Jamais +232:Pas en 4T +233:Toujours + +240:Aucun +235:Leader +236:Top 3 +237:Top 5 +238:Top 10 +239:Tous! + +242:But +243:Utilise les fleches, ESC sort +245:Tu pars deja? +/Four letter words for the different lists +246:PREC +247:SUIV +248: OK + +251:Alors comme ca tu t'en vas... +252:Tu veux vraiment partir? +253:Oh, tu arretes deja? +256:T'es sur de ca? +257:T'es absolument sur? +258:Tape O pour quitter. + +261:Hola! Tu dois avoir (4) +262:ou huit (8) joueurs +263:avant de disputer la Coupe par Equipe! +264:Demande a tes potes de jouer +265:ou clone-toi 4 fois. + +270:Editeur de tremplin +271:(Utilise les fleches, +272:DEL, ENTER or ESC) +/273:Nom de fichier +/274:Nom du tremplin +273:Nom de fichier +274:Nom du tremplin +275:*Ajouter nouveau tremplin* +276:-Sortie- +277:-Commencer- +278:Teste ton tremplin! + +280:Haut +281:Gauche +282:Droite +283:Bas + +285:(C)harger serie +286:(S)auver serie +287:(H)asard +288:Trier par p(O)ints de championnat +289:Trier par p(O)ints + +290:Pas de ralenti! +291:Auteur: +292:Nom: +293:Nom du fichier: +294:Tremplin: +295:Sortir et ne pas enregistrer +296:Sortir et enregistrer +298:(S)auve le ralenti + +300:Sauteurs +301:Selectionne Sauteurs +302:*Creer Nouveau Sauteur* + +304:Nom: +305:Noms reels: +306:Couleur Combinaison: +307:Couleur des Skis: +308:Remplace: +309:Coach: +310:Passer Qlf: +311:Reset Sauteur +312:OK + +313:Nombre total de sauts: +314:Participations en CM: +315:Manches gagnees: +316:Coupes du Monde gagnees: +317:Meilleur resultat en CM: +318:Meilleur resultat en 4T: +319:Plus long saut de CM: +320:Plus long saut: +321:Niveau du RdT: + +322:(Utilise les fleches, +323:ENTER pour editer, +324:DEL annule) +325:ENTER valide, +326:DEL pour supprimer) +328:Supprime le sauteur +329:Change le sauteur + +330:Config clavier +331:Decollage +332:Penche en avant +333:Penche en arriere +334:Atterrissage en telemark +335:Atterrissage pieds-joint +336:Valeurs par defaut +337:Sortie + +340:Temps de suspension +341:Longueur +342:Vitesse: +343:Customise + +345:existe deja. +346:Remplacer? + +350:Sauvegarde ok. +351:Erreur de sauvegarde. +352:Sauvegarde ok. +353:Erreur de sauvegarde. +354:Sauvegarde ok. +355:Erreur de sauvegarde. +356:Pas de serie trouvee! + +360:Bienvenue dans SJ3 et le saut a ski. +361:Petite intro au jeu. +362:L'esprit de ce sport est de sauter aussi +363:loin que possible et d'atterrir sans te blesser. +364:Le sauteur s'assied sur un banc en haut de la +365:rampe.Appuie sur les fleches pour commencer a descendre. +366:L'anemometre est situe en haut a gauche de +367:l'ecran. Il vaut mieux du vent de face qui te porte. +368:La cle d'un bon saut est l'impulsion. +369:Appuie sur haut pour decoller. +370:Tu dois maintenant te pencher en avant pour +371:diminuer la resistance de l'air. Appuie sur droite. +372:Parfois,tu peux etre destabilise par une rafale de vent. +373:Appuie alors sur gauche pour rectifier ta position. +374:Quand la terre se rapproche, il serait prudent +375:de penser a atterrir sans encombre. +376:'T' te fait atterrir en telemark.C'est plus lent et plus +377:dangereux mais rapporte beaucoup de points en style. +378:'R' commence l'atterrisage pieds-joints,plus facile, +379:ce qui est bien pour les sauts tres longs. +380:Ca y est! Tu peux revoir l'intro du +381:menu des ralentis et d'autres infos, lis MANUAL.TXT. + +390:Haut +391:Milieu +392:Bas +393:Gauche +394:Centre +395:Droite +396:Sauteur + + +/Coaching +//The First One 301, 341, 381.. Indicates the Coaching Style +400:Coin de l'Entraineur: +401:Professionnel +402:Essaie de ne pas te laisser aller vers le bas en vol. +403:Bonne position en vol. +404:Position de vol trop verticale. +405:Atterris la prochaine fois. +406:Commence la reception plus tot. +407:Euh, pas de chance sur ce coup. +410:Ca c'est un saut de merde. +411:C'est encore pas tres beau a voir. +412:Honnetement, c'etait un joli saut. +413:Joli saut. +414:Excellent Saut! +415:Incroyable! Ou est-ce que tu as cache ta cape? +418:Commence l'impulsion beaucoup plus tot. +419:Tu as decolle trop tard. +420:Le timing est encore un poil trop tard. +421:Meilleur timing la. +422:Super timing a l'impulsion! +423:Tu as saute legerement trop tot. +424:Ne saute pas si tot. +425:Impulsion affreuse. Saute beaucoup plus tard. +428:Je veux dire beaucoup plus tot. +429:C'etait trop tard cette fois. +430:Tu as atterri a peine a temps. +431:OK pour le timing a la reception. +432:Ca devrait te donner pas mal de points pour le style. +433:Tu aurais pu attendre plus avant d'atterrir. +434:N'aie pas peur de voler plus longtemps. +435:Appuie sur 'R' ou 'T' s'il te plait. + +441:Relax +442:He, te couche pas sur tes skis, non plus. +443:Delicieuse position en vol. +444:N'aie pas peur de te pencher plus, gamin. +445:Atterris la prochaine fois, sinon ca fait mal. +446:Atterrir sur la tete c'est un peu chaud. +447:Eh bien, tu peux pas les réussir tous, tu sais. +450:C'est trop relax ca. +451:Ouais ben c'est pas encore ca. +452:Ca ressemble plus a quelque chose ca. +453:Ca c'est ce que j'appelle un bon saut. +454:Oh yeah, les nanas vont adorer ca! +455:Enoorme! J'aimerais que tu rencontres Superman! +458:Decollage de merde... +459:Si tu veux voler, decolle plus tot. +460:Ton timing n'est pas au point. +461:Ma foi bon timing, mon gars. +462:Hey, J'ai adore l'impulsion! +463:L'impulsion ? Juste un peu tot. +464:Ne precipite pas la reception. +465:Ooh, un jour tu vas te faire mal. +468:Tu devrais travailler un peu la reception. +469:T'as pas peur de mourir?.. +470:Whou, cette reception etait limite. +471:Telemark - Solide comme un Roc. +472:Ooh, M.Atterrissage-en-Douceur est en ville. +473:Ne precipite pas la reception...t'as le temps! +474:Te degonfle pas pendant le vol. +475:N'aie pas peur du clavier, mec. + +481:Strict +482:T'es trop penche en vol, ducon. +483:Ouais pas mal la position en vol. +484:Putain! T'as un balai dans le cul en vol ou quoi?? +485:Oh mon Dieu! Ou qu'elle est cette impulsion? +486:Non! Commence la reception a temps! +487:Bouge ton cul et va bosser! +490:Jamais vu pire saut. +491:Ma mere saute mieux que ca. +492:Qu'est-ce qui va pas? Tu veux rentrer chez maman? +493:Tu peux faire beaucoup mieux. +494:Certains entraineurs se contenteraient de įa mais bon... +495:La t'as saute comme j't'avais dit. +498:C'est pas vrai! Ou qu'elle est cette impulsion?? +499:Impulsion tardive. 50 pompes! +500:Timing mauvais. 25 pompes! +501:Tu peux pas decoller un peu plus tot, non?? +502:Cette impulsion c'etait ce que je voulais. +503:Trop tot! Tu vas te le mettre dans le crane? +504:Envol Catastrophique! 50 pompes! +505:J'ai jamais vu une impulsion aussi nulle. Degage. +508:Atterrir c'est trop te demander, fils a papa?? +509:Non! Commence cette putain de reception plus tot! +510:Trop risquee la reception. +511:Ca ressemblait presque a un telemark. +512:La reception est presque correcte. +513:T'enflamme pas a la reception. +514:T'as peur ou quoi? Vole, bon sang! +515:T'es stupide? Atterris ou rentre chez toi! + + +*K +Savo +/Ki„nt„n„ Hermanni Virtanen (tohevi@hotmail.com) +/Basic Items +1:Yks +2:Kaks +3:Kolome +4:Nelj„ +5:Viis +6:Juu +7:Ee +8:/ +9:Ee alakuunkaa +11:Rekister”ety +12:Se”ve” +13:Tavalline +14:Nys„ +15:Polokase nappija... + +17:Pi„valikko +18:Hyppyytysvalikko + +/Main Menu +20:Hyppeem„„n! +21:Ilimota Hyppeej„t +22:Si„tele +23:Kunnijataolut +24:M„k enn„tykset +25:Vilimit +26:Herkij„ SJ3 +27:SJ3 Mualimankuppi +28:Tie-Ihe-Kuppiisj +29:M„kviikko +30:Joukkuvem„k-kuppi +31:Pi„llysmiesj +32:Ryllee huvikseesj +33:Pi„valikkoon + +34:Hyppeej„t: + +35:T„„n SJ3:n ylypee +36:omistaja onnii: + +/35:T„„n SJ3:n rekister”ejyn +/36:version ylypee omistaja onnii: + +38:T„„p„s onnii rekister”em„t”n +39:versio SJ3:sta. + +40:Luve Register.Txt JUSTIISA! + +41:Haluvatko olla kyl„sj +42:lupsakin patu?, + +43:Kaepootko lissee ieti„ +44:ryyppysakissa? + +45:SJ3 ee ou semmone ilimanep pelj. +46:Ou mies, rekister”e. + +47:Rekister”em„t”n versio +48:antaa vuan kaks pelloojoo. + +/Other Items +51:Harjotukset +52:Harjotuskiekaos +53:Karsintakiekaos +54:Ensm„ne kieppi +55:Toene kieppi +56:Seoroovana... +57:Syyporit hyppee... +58:Riman holli: +59:„ss„st„ si„t”l”ehin +60:S +61:Justiisa +62:Johtoo riitt„„ +63:Voettoon riitt„„ +65:M„k enn„tysj +67:Hyppeeji„ j„lell„: +68:Jatkoo riitt„„: +69:Viimene: +70:Mualimankuppi tilanne +71:Nykyne tilanne kupissa +75:Poessa +76:kilipaelua +77:seor. kiekaokse +78:seor. kilipaelun +79:onnii hyl„tty! + +81:R„tinkiluvettelo - Kilipailu +82:Karsinta - Kilipailu +83:/ 4 +84:M„kviikko - Kilipailu +85:M„kviikon lopputulokset +86:(tihheempi luvettelo) +87:Tilanne - Kilipailu +88:Hyppeej„ +89:Mualimankuppir„tingit: +90:Lopputulokset + +91:Joukkuvem„ktilanne - Kilpailu +92:Joukkuvem„kkupin lopputulokset +93:Joukkuvem„in r„tingit - Joukkuve: +94:puotussysteemiparit +/94:Tyrm„yssysteemin tajsteluparit +95:Tulokset +96:Pi„llysmiesj +97:Tulosj +98:MK +99:Mviikko: +100:Yhtees„: +101:L„htenn„ hilippassemmaan: +102:Kilipaelusta poekessa: +103:Nuapurin puolele rytk„ht„nneet: +104:Ryllyytysluvala pyyhitty...: +105:M„nn„ saonommaan: +106:Missee? +107:Joukkuve: +108:Sij +109:Pst +110:JM + +111:Valamistaavu Joukkuvem„kkeen +112:Joukkuvem„en aekataolu: +113:Nimmee joukkuvvesj +114:Joukkuve + +115:Paras tulos: +116:Lattoo omat m„it +118:Valihe m„it Tie-Ihe-Kuppiisj +117:Paa omat m„it talteen +119:Nuolila liikkuu, ENTER alottaa, ESC poestuu + +120:Tietokonehyppeej„t: +121:Ryllyyt„ *Pi„llysmiesj* +122:Valihe Huastetaso +123:Valihe Muut +124:Ryllee: +125:Tuulj? +126:Usseesti? +127:Palloo Pi„valikkoon +128:Uus ommiin m„kkiin ennätys! +129:Ijäikkuine ennätys: + +130:P.M. Huastetaso +131:Helevetin Vaekee +132:Melekosen Vaekee +133:Vaekeen Syr„kk„ +134:Vasemmala K„el„ +135:Nuapurin Sokkee Kaoko +136:Hohhoh +137:Tie-Ihe +138:Valihe Vastustajjaesj +139:Valihe nuolila taso +140:ENTER hyv„ksynnee, ESC poestuu +141:Nimi +142:Taso +143:Eto Epelj! + +/145:Ilimota hyppeej„t +146:(Kursorit, ENTER, DEL ja ESC) +/147:*Uusj Hyppeej„* +/148:Poestu +/149:Valihe lyyssin v„rj +150:(Kursorit, ENTER ja ESC) + +151:Missee Sie +152:Halluut T„nn„„n +153:Ryllyyttee? +154:Poestu +155:Kuha h„nt„ +156:Lisee M„kij„... +157:Sivu +158:Seoroova sivu +159:Eelline sivu + +160:Pi„llysmiesj Huasteet +161:Selevitt„m„ti +162:Parraat kustomitulokset tallessa +163:20 Parraenta SJ3 Mualimankuppitulosta +164:10 Parraenta Joukkuvem„ktulosta +165:5 Parraenta M„kviikon pistesualista +166:Nimi +167:Sij +168:Pisteet +169:Millonka? +170:M„k enn„tykset +171:Kuka? +172:Paljoka? +172:Paljoka? +173:Vile +174:Pts +/173: + +/Setup Menus +175:Si„t”l”ehin Pi„valikko +176:Ylleissumplingit +177:Ryllyytyssumpingit +178:Kunnijataoluasetukset + +180:Selev„ +181:Passoo +182:Voe Tokkiisa +183:No vot +184:Juu +185:El„pp„sj +186:Ee Passoo +187:Ee +188:El„ Turhoo +189:El„ + +190:Alusta +191:Nolloo +192:Kunnijataolut? +193:Oottako justiin vissi? +194:Meinootko poestoo +/194: +195:Poestu Si„t”l”est„ +196:Ylleiset si„v”t +197:Ryllyytyssi„v”t +198:Kunnijataoluhin si„v”t +199:Miumaumukkaa n„ppyl„t +200:Paa m„kenn„tystavotteet +201:M„kkiin hallinta +/200:M„kkiin sumplooja +203:Palluu si„t”l”eihin pi„valikkoon +204:Kielj? +/203:Valamennustyyli? +205:I„njmerkit? +206:Yljmi„r„ssiin piirrusuksiin taso? +207:Vastustajjiin nimitiijot (NAMES?.SKI)? + +208:Harmoot kohat pelloovat +209:vuan rekister”ejyss„ peliss„ + +211:Palloo Pi„si„t”valikkoon +212:Harjotuskiekaoksia? +213:Lissee r„tingit? +214:N„„t„ tulosr„tingit erona? +215:N„„t„ mualimankuppir„tingit erona? +216:Tiheemm„t tuloslistat? +217:L„pn„kyv„t listohin taostat? +/217:Esjtietoo m„ist„? +/218:J„t„ aena turha karsinta v„lliin? +/218:hylykee turhat karsinnat +218:Tallennettaanko m„k'enn„tykset itest„„n? +219:N„„t„ enn„tystavote? +220:Valakkoo kahottavat konehyppej„t? +221:Valihe tuuljhyrryk„n paekka +/218:Montako tietokonehyppeejee kahotaan? +219:N„„t„ enn„tystavote? +220:Valakkoo kahottavat konehyppej„t? +221:Valihe tuuljhyrryk„n paekka +/222:Ve„ Tyrm„yssysteemill„ M„kviikolj? +222:k„„t„ puotussysteemij„ m„kviikola? + + +225:M„„ takasij +226:Tietokonneen tekem„t m„k enn„tykset? +227:Suapko listala olla samoja nimij„? +228:Alusta Kunnijataolut +229:Nolloo Kunnijataolut +230:Paa asetukssiij alakuarvot takasij + +/231:Ee ikuna +231:ee ik„n„ +232:Ee m„kviikola +233:Aena + +240:Ee kett„„n +235:Kymppi +236:Kolomen Pi„ +237:Viijen Pi„ +238:Kymmene Pi„ +239:Kaekki! + +242:Tavote +243:Nuolila liikkuu, ESC poestaa +245:L„h”ss„ poes? +/Four letter words for the different lists +246:EELL +247:SEOR +248:VALM + + +251:L„het sitte m„nemm„„n... +252:Haluvatko toellae poes? +253:El„ nyt viel„ karkoo. +256:Oottako ty” justiin vissi? +257:Toenperr„„n? +258:Lykkee jiit„ jos poes meinnoot. + +261:Toppuuta! Siula pitt„„ olla nelj„ (4) +262:tae kaheksan (8) pelloojoo, jotta +263:voet pittee joukkuvekinkerit! +264:Pyyv„ parj tuttuva pelloomaan tae +265:paa oma nimmeisj usseempaa kertaa... + +270:SJ3 M„kkiin V„ssyy +271:(k„„t„ nuolija, +272: ENTERi„ tae ESCi„) +273:Vile +274:M„k +275:*Lisee Uusj* +276:-Poestu- +277:-Ryllyyt„- +278:Kokkeele! + +280:Nuolj ylös +281:Nuolj vasemmale +282:Nuolj oekeele +283:Nuolj alas + +285:(L)attoo satsi +286:(P)aa taltee +287:(M)ik„lie +288:(J)„rjestele Mualimankuppi-pisteehin perusteela? +289:(J)„rjestele kaekkiin pisteehin perusteela? + + +290:Eep„ l””tyn„ vilimij„! +291:V„syri: +292:Nimi: +293:Vilenimi: +294:M„k: +295:Poes, ee taltee +296:Poes ja taltee +298:(P)aa taltee + +300:Hyppeej„t +301:Valakkoo hyppeej„t +302:*Uus hyppeej„* + +304:Nimi: +305:Oekee nimesj: +306:Lyyssin v„rj: +307:Suksiin v„rj: +308:Vaeha: +309:Valamentaja: +310:Ee karsintoo: +311:Nolloo hyppeej„ +312:Poekkeen + +313:Hyppyj„ yhtees„: +314:Mualimankupit: +315:Kisoja voetettu: +316:Mualimankupit voetetut: +317:Paras mualimankuppi: +318:Parraat 4m„kkee: +319:Hirmusin MK hyppy: +320:Hirmusin hyppy: +321:Pi„llysmies: + +322:(Nuolila liikkuu, +323:ENTER mulukkoo, +324:DEL poestaa rivist„) +325:ENTER merkkoo, +326:DEL poestaa kokonnaa) +328:Poesta hyppej„ +329:Nolloo hyppeej„ + +330:N„ppyl„t +331:P„kist„ +332:Kenota +333:Kellist„ +334:Telemarkki +335:Tasajalakoo alas +336:Alakupe„set si„v”t +337:Huit nevadaan + +340:Lentoaeka: +341:Pittuus: +342:Vaohti: +343:Kustomi + +345:on jo olemassaan. +346:Kirjota piäle? + +350:Vilimi m„nj taltee. +351:Vilimij„ ee pantu taltee. +352:Oma satsi tallessa. +353:Ommoo satsij„ ee pantu taltee. +354:Ylmi„r„ne m„k tallessa. +355:Ylmi„r„st„ m„kkee ee pantu taltee. +356:Omija satsija ee l„„tynn„! + +360:Tervetulloo pelloomaan m„khyppyv„. +361:Tiijossa on rivakka vilikasu pelliin. +362:M„khypyss„ oes tarkotus lentee nii pitk„le +363:ku pi„s”” ja lasseetuva jalolleen. +364:Siun hyppeej„ nakottaa riuvulla yl„m„in +365:pi„l„. Hipase oekeeta nuolta ja ukko l„ht””. +366:Tuuljhyrrykk„ mollottaa vasemmassa alakulumassa. +367:Vastatuulj lenn„t„„ jonniiverrap paremmi. +368:Hyvv„„n hyppyy pitt„„ polokasun sattuva +369:justii kohallee. Nuolj yl”s taetaa olla se nappi. +370:Sitte pit„sj pi„st„ hypyn pi„le jotta tuulijaene +371:ee paenas ukkova rinteesee. Oekeela nuolela se hoetuu. +372:Suattaa se tuulijaene r„p”stell„ sit„ ukkova, +373:mutta vasemmala nuolela keno korjaatuu. +374:Ku se Muaemo ruppee l„hentelemm„„n voep tulla +375:lasseentumine mielee hyvinnii herk„sti. +376:Yllees„ 'T' -nappi ruppee tekem„„n telemarrkkija. +377:Oha se hijas ja kostikas, mutta tuomarit tykkee. +378:Sitte on 'R' -nappi, jolla suap tasajalaka-alastulon. +379:Se on makija varsinnii pitemmiss„ leiskaotuksissa. +380:Eep„ t„ss„ sen kummempia. t„„n voep kahtoo uuvestaa +381:Vilimit-valikossa. Muile ko savolaesile on MANUAL.TXT. + +390:Yll„„ +391:Keskee +392:Allaa +393:Vase +394:Keskee +395:Oekee +396:Hyppeej„ + + +/Coaching +400:Valamentaja hupattaa: +//The First One Indicates the Style 301,341,381... +401:Lupsakka +402:El„ kaho ota liikoo etukennoo. +403:Tuo olj justii passelj keno. +404:El„ pelekee, kahtele vuan ietillee alasp„en. +405:Rutale, tie nyt ies jonniimoene lopsaotus. +406:Sieh„ tuut turvallee alas. +407:Ohhoh, olj v„h„ paskoo tuurija. +410:No tuo nyt olj iha persiist„. +411:Koeta nyt pikkuse ies r„pik”ej„. +412:No jokkii roti, naeset kahtoo. +413:No sep„sj m„nj rapsakkaa. +414:HojoHojo! Sep„sj m„nj vihmer„sti. +415:Perskules! Sieh„ lenn„t ko Lev„ne! +418:Sieh„ p„kist„t ko pytyl„. +419:Polokase aekasemmi. +420:Viel„kkii loevansyr„kk„ p„kistys. +421:Ruppee tuo polokasu olemmaa kohillaa. +422:No se m„nj justiisa nappiij. +423:El„pp„s h”tkyv„. +424:Minnek„sj siula o hoppu? +425:Tuoha m„nn”” iha mitem puuttujjaa. +428:Suattasim p„hk„ell„ tuota lasseetumista. +429:El„ hyppee tuollee. M„nn”” turpa murole. +430:M„njp„ aeka hilikule tuo siun lopsaotus. +431:Lupsakkaan lopsaotit. +432:Kahonni„tsen, olpas huljakka lopsaotus. +433:Melekolaela h„t„sseen rupesit allaa tulemmaa. +434:No mik„mik„? Suap sit„ lenteenni. +435:El„ pelekee t”kkij„ niit„ r„mpyttimij„. + + +441:Lupsakka +442:El„ kaho ota liikoo etukennoo. +443:Tuo olj justii passelj keno. +444:El„ pelekee, kahtele vuan ietillee alasp„en. +445:Rutale, tie nyt ies jonniimoene lopsaotus. +446:Sieh„ tuut turvallee alas. +447:Ohhoh, olj v„h„ paskoo tuurija. +450:No tuo nyt olj iha persiist„. +451:Koeta nyt pikkuse ies r„pik”ej„. +452:No jokkii roti, naeset kahtoo. +453:No sep„sj m„nj rapsakkaa. +454:HojoHojo! Sep„sj m„nj vihmer„sti. +455:Perskules! Sieh„ lenn„t ko Lev„ne! +458:Sieh„ p„kist„t ko pytyl„. +459:Polokase aekasemmi. +460:Viel„kkii loevansyr„kk„ p„kistys. +461:Ruppee tuo polokasu olemmaa kohillaa. +462:No se m„nj justiisa nappiij. +463:El„pp„s h”tkyv„. +464:Minnek„sj siula o hoppu? +465:Tuoha m„nn”” iha mitem puuttujjaa. +468:Suattasim p„hk„ell„ tuota lasseetumista. +469:El„ hyppee tuollee. M„nn”” turpa murole. +470:M„njp„ aeka hilikule tuo siun lopsaotus. +471:Lupsakkaan lopsaotit. +472:Kahonni„tsen, olpas huljakka lopsaotus. +473:Melekolaela h„t„sseen rupesit allaa tulemmaa. +474:No mik„mik„? Suap sit„ lenteenni. +475:El„ pelekee t”kkij„ niit„ r„mpyttimij„. + +481:Lupsakka +482:El„ kaho ota liikoo etukennoo. +483:Tuo olj justii passelj keno. +484:El„ pelekee, kahtele vuan ietillee alasp„en. +485:Rutale, tie nyt ies jonniimoene lopsaotus. +486:Sieh„ tuut turvallee alas. +487:Ohhoh, olj v„h„ paskoo tuurija. +490:No tuo nyt olj iha persiist„. +491:Koeta nyt pikkuse ies r„pik”ej„. +492:No jokkii roti, naeset kahtoo. +493:No sep„sj m„nj rapsakkaa. +494:HojoHojo! Sep„sj m„nj vihmer„sti. +495:Perskules! Sieh„ lenn„t ko Lev„ne! +498:Sieh„ p„kist„t ko pytyl„. +499:Polokase aekasemmi. +500:Viel„kkii loevansyr„kk„ p„kistys. +501:Ruppee tuo polokasu olemmaa kohillaa. +502:No se m„nj justiisa nappiij. +503:El„pp„s h”tkyv„. +504:Minnek„sj siula o hoppu? +505:Tuoha m„nn”” iha mitem puuttujjaa. +508:Suattasim p„hk„ell„ tuota lasseetumista. +509:El„ hyppee tuollee. M„nn”” turpa murole. +510:M„njp„ aeka hilikule tuo siun lopsaotus. +511:Lupsakkaan lopsaotit. +512:Kahonni„tsen, olpas huljakka lopsaotus. +513:Melekolaela h„t„sseen rupesit allaa tulemmaa. +514:No mik„mik„? Suap sit„ lenteenni. +515:El„ pelekee t”kkij„ niit„ r„mpyttimij„. + + +*L +Italian +//Translated by Vittorio di Vincentis + +/Opzioni principali +1:Uno +2:Due +3:Tre +4:Quattro +5:Cinque +6:Si +7:No +8:di +9:Nessuno +11:Registrato +12:Shareware +13:Normale +14:Basso +15:Premere un tasto... + +17:Menu Principale +18:Menu del Salto + +/Menu Principale +20:Salta! +/21:Registra i saltatori +/21:Profili +21:Saltatori +22:Menu di setup +23:I migliori +24:Record della Collina +25:Replay +26:Esci SJ3 + +27:SJ3 Coppa del Mondo +28:Coppa del Mondo personalizzata +29:Tour delle quattro Colline +30:Coppa delle squadre +31:Re della Collina +32:Esercitazione +33:Torna al Menu Principale + +34:Saltatori: + +35:Questa versione +36:e' registrata a: + +38:Questa e' una versione +39:non registrata di SJ3. + +40:Leggi Register.Txt Adesso! + +41:Su come essere il gatto piu' figo +42:del tuo vicinato, + +43:Vuoi guadagnarti il rispetto tra +44:i tuoi amici? Registrati! + +45:Questo non e' un game freeware. +46:Fai la cosa giusta, registrati. + +47:Solo Due Giocatori ammessi +48:in questa versione non registrata! + +/Altre Opzioni +51:Pratica +52:Giro di Esercitazione +53:Giro di Qualifica +54:Giro 1 +55:Giro 2 +56:Prossimo Su... +57:I Computer saltano... +58:Cancello di Partenza: +59:Premi (S) per Menu Setup +60:S +/voce 60 marca la lettera che attiva il menu setup +61:Adesso +62:Bisogno di una Guida +63:Bisogno di Vittoria +65:Record della Collina +67:Saltatori rimasti: +68:Occorre Battere: +69:Attualmente Ultimo: +70:Attualmente Classifica WC +71:Attualmente Classifica TC +75:Mancati Prossimo +76:Tratte +77:Turno +78:Tratta +79:e' Squalificato! + +81:Tabellone - Tratta +82:Qualifying - Tratta +83:di 4 +84:Giro delle quattro Colline - Tratta +85:Risultati finali del Giro delle Quattro Colline +86:(lista compatta) +87:Classifica dopo Tratta +88:Saltatore +89:Statistiche Coppa del Mondo per +90:Risultati finali del + +91:Classifica Coppa a Squadre dopo Tratta +92:Risultati Finali delle Coppa a Squadre +93:Statistiche Coppa a Squadre per +94:Accoppiamenti del sistema dell' espulsore +95:Classifica +96:Re della Collina +97:Punteggio +98:WC +99:4colline: +100:Totale: +101:Fuori dalla Competizione: +102:Fuori dai Salti: +103:Saltatori Eliminati: +104:Negli Spogliatoi: +105:Non piu' tra di noi: +106:Dove? +107:Squadra: +108:Pos +109:Pti +110:TC + +111:Preparati per la Coppa a Squadre +112:Programma della Coppa a Squadre: +113:Prego Immettere Nome Squadra +114:Squadra + +115:Miglior Risultato: +116:Carica Set di Collina Personalizzata +117:Salva Set di Collina Personalizzata +118:Seleziona Colline per la tua Coppa del Mondo Personalizzata +/119:Usa le frecce, ENTER sceglie, ESC inizia +119:Usa le frecce, ENTER inizia, ESC esce + +120:Saltatori del Computer: +121:Inizia *Re della Collina* +122:Seleziona Livello di Sfida +123:Scegli Avversari +124:Salto a +125:Vento? +126:Giro? +127:Torna al Menu Principale +128:Nuovo Record del Set Personalizzato! +129:Vecchio Record: + +130:K.O.T.H Livello di Sfida +131:LA SFIDA FINALE +132:TIPI DURI +133:INFRAZIONE DI VARIAZIONE +134:COMPLETAMENTE BATTIBILE +135:LA CASA DELLA VECCHIA GENTE +136:PICCOLE DONNE IN ABITI ROSA +137:PERSONALIZZATO +138:Seleziona i tuoi Avversari +139:Usa le frecce per Selezionare il Livello +140:ENTER sceglie, ESC esce +141:Nome +142:Posizione +143:Il Re! + +/145:Registra Saltatori +146:(Usa le frecce, ENTER, DEL o ESC) +/147:*Aggiungi Giocatore* +/148:Esci +/149:Scegli Colore della Divisa +150:(Usa frecce, ENTER o ESC) + +151:Dove +152:Vuoi Saltare +153:Oggi? +154:Uscita +155:Collina WC Casuale +156:Altre Colline... + +157:Pagina +158:Pagina Successiva +159:Pagina Precedente + +160:Sfide del Re della Collina +161:Non Completato +162:Migliori Salvati della Collina Personalizzata +163:Risultati Top 20 Coppa del Mondo SJ3 +164:Risultati Top 10 Coppa a Squadra +165:Punteggi Top 5 del Giro delle 4 Colline +166:Nome +167:Pos +168:Punti +169:Dove? +170:Record della Collina +171:Chi? +172:Quanto? +173:File +174:Pti +/Menu Setup +175:Menu Principale Setup +176:Queste sono Opzioni Generali +177:Alcune Opzioni sui Salti +178:Alcune Opzioni sugli Alti Punteggi + +180:Oh Si +181:Certo +182:Sissignore +183:Si +184:Si +185:Oh No +186:Non esiste +187:Negativo +188:No +189:Noo + +190:Resetta +191:Zero +192:Gli Alti Punteggi? +193:Sei sicuro? +194:Da Cancellare +195:Uscita dal Setup + +196:Opzioni Generali +197:Opzioni di Salto +198:Alti Punteggi e Opzioni Setup +199:Personalizza Tasti +200:Stabilisci Obiettivo del Record della Collina +201:Costruttore della Collina +/202:Manager della Collina + + +203:Torna al Setup Principale +204:Lingua? +205:Bip? +206:Livello di Dettaglio della Grafica? +207:Insieme Nomi degli Avversari del Computer (NOMI?.SCI)? + +208:Le voci in grigio sono +209:disponibili solo nella versione Registrata + +211:Torna al Setup Principale +212:Giri di Pratica? +213:Statistiche Extra? +214:Mostra Tabella Punteggi con Differenziali? +215:Mostra Classifica della Coppa del Mondo con Differenziali? +216:Tabella Punteggi Compatta? +217:Sfondo Tabella Punteggi Invisible? +/218:Ignora Qualificazioni non Necessarie? +/218:Automatically Save Hill Record Replays? +218:Tenere Sempre Record della Collina? +219:Formula Obiettivi del Record della Collina? +220:Seleziona Saltatori del Computer Visti? +221:Seleziona Posizione Segnavento +222:Usare il KO-sistema in 4 colline? + +225:Esci Setup degli Alti Punteggi +226:I Saltatori del Computer possono saltare i Record della Collina? +227:Ammetti molti Nomi identici sulla Lista +228:Resetta Alti Punteggi +229:Azzera Alti Punteggi +230:Torna ai Valori Predefiniti di Setup + +231:Mai +232:Non in 4H +233:Sempre + +235:Leader +236:Top 3 +237:Top 5 +238:Top 10 +239:Tutti! +240:Nessuno + +242:Obiettivo +243:Usa le frecce, ESC uscita + +245:Te ne vai gia'? +/Parole per le diverse liste +246:PREC +247:SUCC +248:FATTO + +251:Allora te ne vai... +252:Vuoi veramente andartene? +253:Oh, te ne vai cosi' presto? +256:Sei sicuro di questo? +257:Sei assolutamente certo? +258:Di Y per uscire ora. + +261:Ahoy! Devi avere quattro (4) +262:oppure otto (8) giocatori registrati +263:prima di entrare la Coppa a Squadre! +264:Chiedi ai tuoi amici di partecipare +265:oppure clona te stesso quattro volte. + +270:SJ3 Costruttore della Collina +271:(usa frecce, DEL, +272: ENTER o ESC) +273:Nome del File +274:Nome della Collina +275:*Aggiungi Nuova Collina* +276:-Uscita- +277:-Inizio- +278:Prova la tua Collina! + +280:Freccia Su +281:Freccia Sinistra +282:Freccia Destra +283:Freccia Giu + +/280:Saltatori +/281:Seleziona Saltatori +/282:*Crea Nuovi Saltatori* + +285:(L)oad set +286:(S)ave set +287:(R)andom set +288:S(O)rt by WC Points +289:S(O)rt by Total Points + +290:Nessun Replay Trovato! +291:Autore: +292:Nome: +293:Nome del File: +294:Collina: +295:Esci, non salvare +296:Esci e salva +/The second letter is the key that will save the replay +298:(S)alva Replay + +300:Saltatori +301:Seleziona Saltatori +302:*Crea Nuovo Saltatore* + +304:Nome: +305:Nome vero: +306:Colore Divisa: +307:Colore Sci: +308:Riserva: +309:Allenatore: +310:Pass Elim.: +311:Resetta Saltatori +312:Uscita + +313:Totale Salti: +314:Coppe del Mondo Completate: +315:Frazioni vinte: +316:Coppe del Mondo vinte: +317:Migliori Risultati della Coppa del Mondo: +318:Migliori delle 4 Colline: +319:Salto piu' lungo della Coppa del Mondo: +320:Salto piu' Lungo: +321:Livello KOTH: + +322:(Usa frecce, +323:ENTER edita saltatori, +324:DEL rimuovi dall'ordine) +325:ENTER registra, +326:DEL cancella saltatori) + +328:Cancella saltatori +329:Risettaggio saltatore + +330:Mappa tasti +331:Decollo +332:Ruota in avanti +333:Ruota indietro +334:Telemark atterraggio +335:Atterraggio a 2 gambe +336:Ritorna Default +337:Esci + +/Still some replay stuff +340:Tempo in Sospensione +341:Lunghezza +342:Velocita': +343:Personale + +345:Gia' esiste +346:Sovrascrivere? + +350:Il Replay e' stato salvato. +351:Il Replay non e' stato salvato. +352:Il Set Personalizzato e' stato salvato. +353:Il Set Personalizzato non e' stato salvato. +354:La Collina Extra e' stata salvato. +355:La Collina Extra non e' stata salvato. +356:Nessun Set Personalizzato Trovato! + +/Intro +360:Benvenuti in SJ3 e nello sport del Salto con gli Sci. +361:Qui c'e' una rapida introduzione al gioco. +/361:Questa e' una rapida introduzione al gioco. + +362:L'idea in questo sport e' di volare il piu' lungo +363:possibile e atterrare in modo sicuro. + +364:Il tuo saltatore siede su una barra all'inizio +365:del turno. Usa Freccia Destra per iniziare a scivolare. + +/366:Il Segnavento e' situato in basso a sinistra dello +/367:schermo. Vento contrario e' migliore poiche' aumenta la spinta in alto. + +366:Il Segnavento e' situato in basso a sinistra. Vento +367:contrario (negativo) e' migliore poiche' aumenta la spinta in alto. + +368:Il segreto per un salto valido e' la scelta del tempo del +369:decollo. Usa Freccia Su per iniziare il decollo. + +370:Ora dovresti ruotare il saltatore in avanti per +371:diminuire la resistenza del vento. Usa Freccia Destra. + +372:A volte un colpo di vento potrebbe farti +373:sbilanciare. Usa Freccia Sinistra per ribilanciarti. + +374:All'avvicinarsi della terra sarebbe saggio +375:iniziare a pensare a far atterrare il tuo saltatore in modo sicuro. + +376:Il tasto 'T' inizia l'atterraggio Telemark. E' +377:piu' lento e piu' insicuro ma premiato in punti per stile. + +378:Il tasto 'R' inizia il piu' sicuro atterraggio a 2 piedi, +379:e' piu' sicuro e buono per salti lunghi. + +380:E' tutto! Puoi tornare a questa introduzione ancora dal +381:menu Replay e per ulteriori informazioni, leggi MANUAL.TXT. +/382:Buon divertimento! + +390:Alto +391:Centro +392:Basso +393:Sinistra +394:Centro +395:Destra +396:Saltatore + +/Coaching +//The First One 401, 441, 481.. Indicates the Coaching Style +400:Angolo dell'Allenatore: +401:Professionale +402:Prova a non permettere alla posizione di volo di essere cosi' bassa. +403:Buona posizione in volo. +404:La tua posizione di volo e' troppo eretta. +405:Fa un atterraggio la prossima volta. +406:Inizia l'atterraggio prima. +407:Uuh, sfortuna su quello. +410:Pessimo salto. +411:Non e' buono ancora. +412:Quello e' un salto abbastanza buono. +413:Buon salto. +414:Salto Eccellente! +415:Incredibile! Dov'e' il tuo mantello? +418:Inizia il decollo molto prima. +419:Il decollo era troppo tardi. +420:Tempismo e' ancora un po' in ritardo. +421:Tempismo migliore questa volta. +422:Tempismo perfetto per il decollo! +423:Eri un po' troppo in anticipo sul decollo. +424:Non iniziare il decollo cosi' presto. +425:Decollo orribile. Inizialo molto piu' tardi. +428:Intendo molto piu' presto. +429:Questa volta era troppo in ritardo. +430:L'atterraggio era a mala pena in tempo. +431:Tempismo ok in atterraggio. +432:Quello dovrebbe dare buoni punti per lo stile. +433:Avresti potuto aspettare di piu' prima di atterrare. +434:Non aver paura di volare piu' lungo. +435:Premi 'T' o 'R', prego. + +441:Rilassato +442:Aw, non ruotare troppo il salto, amico. +443:Quella e' una posizione di volo carina. +444:Non aver paura di inclinarti in avanti di piu', figliolo. +445:Per favore atterra la prossima volta, quello fa male. +446:Stai ancora atterrando di faccia, ragazzo. +447:Be', non puoi sopportarli tutti, sai. +450:Quello e' troppo rilassato. +451:Be', prova a non esercitarti. +452:Quello sembra un po' piu' corretto. +453:Ora quello e' cio' che chiamo un buon volo. +454:Oh si, alle ragazze piacera' quello! +455:Grande! Vorrei che tu incontrassi Superman! +458:Che decollo da culo pigro... +459:Se vuoi volare, decolla prima. +460:Il tuo tempismo non e' buono. +461:Tempismo abbastanza buono fuori tabella, amico. +462:Hey, Mi e' piaciuto il tuo decollo! +463:Il decollo era appena in anticipo. +464:Non aver fretta col decollo. +465:Ooh, ti farai male qualche giorno. +468:Dovresti probabilmente lavorare sull' atterraggio +469:Non hai paura di morire?.. +470:Whew, quell'atterraggio era proprio al bordo. +471:Atterraggio - Solido come una Roccia. +472:Ooh, Signor Atterraggio Morbido e' in Citta'. +473:Non affrettare quella sensazione di atterraggio... +474:Non aver fifa sul volo. +475:Non aver paura della tastiera, amico. + +481:Severo +482:Sei troppo in avanti nel volo, ciuccio. +483:Posizione di volo decente. +484:Buono a nulla! Ruota il salto da uomo. +485:Oh Dio! Dove e' l'atterraggio? +486:No! Inizia il maledetto atterraggio in tempo! +487:Alza il culo e torna al lavoro! +490:Non ho mai visto un salto peggiore. +491:Mia madre salta meglio. +492:Che c'e'? Vuoi andare a casa dalla mamma? +493:Puoi fare molto meglio. +494:Alcuni allenatori sarebbero contenti con quello. +495:Ora stai saltando come ti ho detto. +498:Orribile! Dov'e' il dannato decollo! +499:Decollo ancora in ritardo. 50 flessioni! +500:Il tuo tempismo e' ancora pessimo. 25 flessioni! +501:Non puoi decollare un po' prima? +502:Ora il decollo era cio' che volevo. +503:Troppo presto! Non puoi imparare? +504:Decollo Catastrofico! Dammi 50 flessioni! +505:Non ho mai visto un decollo peggiore. Vai a casa. +508:L'atterraggio e' troppo duro, cocco di mamma? +509:No! Inizia il dannato atterraggio in tempo! +510:Quell'atterraggio e' troppo rischioso. +511:Quello sembrava quasi un atterraggio. +512:Suppongo che era un atterraggio ok. +513:Non ti imbranare nell'atterraggio. +514:Di cosa hai paura? Vola, dannazione! +515:Sei stupido? Atterra o vai a casa! + +*M +Srpski +/= Serbian +/Translated by Ivan Milenkovic + +/Basic Items +1:Jedna +2:Dve +3:Tri +4:Cetiri +5:Pet +6:Da +7:Ne +8:od +9:Nista +11:Registrovana +12:Shareware +13:Normalan +14:Slab +15:Pritisni taster... + +17:Glavni Meni +18:Skakacki Meni + +/Main Menu +20:Skaci! +/21:Prijavi skakaca +/21:Profil +21:Skakaci +22:Setup Meni +23:Hol Slavnih +24:Rekordi skakaonica +25:Snimci +26:Izadji iz SJ3 + +27:SJ3 Svetski Kup +28:Custom Kup +29:Turneja 4 Skakaonice +30:Timski Kup +31:Kralj Skakaonice +32:Trening +33:Vrati se u Glavni Meni + +34:Skakaci: + +35:Ova verzija je +36:registrovana na ime: + +38:Ovo je neregistrovana +39:verzija SJ3. + +40:Procitaj Register.Txt sada! + +41:Ukoliko zelis da budes najpopularnija +42:faca u komsiluku, + +43:Zelis da te postuju +44:prijatelji? Registruj, covece! + +45:Ovo nije besplatna igrica. +46:Uradi pravu stvar, registruj. + +47:Samo dva igraca mogu da igraju +48:u ovoj neregistrovanoj verziji! + +/Other Items +51:Vezbanje +52:Trening +53:Kvalifikacije +54:Runda 1 +55:Runda 2 +56:Sledi... +57:Kompjuter skace... +58:Startna kapija: +59:Pritisni (S) za Setup Meni +60:S +/item 60 marks the letter that activates the setup menu +61:Trenutni plasman +62:Potrebno za vodjstvo +63:Potrebno za pobedu +65:Rekord skakaonice +67:Preostalo skakaca: +68:Potrebno da nadmasis: +69:Trenutno poslednji: +70:Trenutni plasman u Svetskom Kupu +71:Trenutni plasman u Timskom Kupu +75:Propustas +76:takmicenja +77:rundu +78:takmicenje +79:je diskvalifikovan! + +81:Rezultati - Takmicenje +82:Kvalifikacije - Takmicenje +83:od 4 +84:Turneja 4 Skakaonice - Takmicenje +85:Konacni rezultati Turneje 4 Skakaonice +86:(kompaktna lista) +87:Plasman posle takmicenja +88:Skakac +89:Statistika Svetskog Kupa za +90:Konacni rezultati od + +91:Plasman Timskog Kupa posle takmicenja +92:Konacni rezultati Timskog Kupa +93:Statistika Timskog Kupa za +94:Parovi u nok-aut sistemu +95:Plasman +96:Kralj Skakaonice +97:Skor +98:SK +99:4 skakaonice: +100:Ukupno: +101:Ispao/li iz takmicenja: +102:Vise ne skace/u: +103:Eliminisan/i skakac/i: +104:U svlacionici/ama: +105:Nije/su vise sa nama: +106:Gde? +107:Tim: +108:Poz. +109:Poena +110:TK + +111:Pripremite se za Timski Kup +112:Raspored Timskog Kupa: +113:Dajte ime timu +114:Tim + +115:Najbolji rezultat: +116:Ucitaj set svojih skakaonica +117:Sacuvaj set svojih skakaonica +118:Izaberi skakaonice za svoj Kup +/119:Koristi strelice, ENTER bira, ESC startuje +119:Koristi strelice, ENTER startuje, ESC iskljucuje + +120:Kompjuterski skakaci: +121:Igraj *Kralj Skakaonice* +122:Izaberi nivo izazova +123:Izaberi protivnike +124:Skakaonica +125:Vetar? +126:Runde? +127:Vrati se u Glavni Meni +128:Novi rekord tvog seta! +129:Stari rekord: + +130:K.S. nivo izazova +131:KONACNI OBRACUN +132:TVRDI ORASI +133:POVREMENA OFANZIVA +134:TOTALNO POBEDIVI +135:STARCI U KUCI +136:DEVOJCICE U ROZE SUKNJICAMA +137:CUSTOM +138:Izaberi svoje protivnike +139:Koristi strelice da izaberes nivo +140:ENTER bira, ESC iskljucuje +141:Ime +142:Plasman +143:Kralj! + +/145:Prijavi skakaca +146:(Koristi strelice, ENTER, DEL ili ESC) +/147:*Dodaj igraca* +/148:Izlaz +/149:Izaberi boju skakackog odela +150:(Koristi strelice, ENTER ili ESC) + +151:Gde ti +152:Zelis da skaces +153:Danas? +154:Izlaz +155:Nasumice izabrana skakaonica SK +156:Jos skakaonica... + +157:Stranica +158:Sledeca stranica +159:Prethodna stranica + +160:Izazovi Kralja Skakaonice +161:Nije zavrsen +162:Sacuvani najbolji rezultati napravljenih skakaonica +163:Top 20 rezultata SJ3 Svetskog Kupa +164:Top 10 rezultata Timskog Kupa +165:Top 5 skorova Turneje 4 skakaonice +166:Ime +167:Poz. +168:Poena +169:Kada? +170:Rekordi skakaonica +171:Ko? +172:Koliko? +173:Fajl +174:Poeni +/Setup Menus +175:Glavni Setup Meni +176:Ovo su generalne opcije +177:Neke opcije u vezi skokova +178:Neke opcije u vezi hiscore-ova + +180:O da +181:Sigurno +182:Da gospodine +183:Da +184:To +185:O ne +186:Nema sanse +187:Negativno +188:Ne +189:Nikako + +190:Reset +191:Izbrisi +192:Hiscore-ove? +193:Da li si siguran? +194:Oko brisanja +195:Izadji iz setup-a + +196:Generalne opcije +197:Skakacke opcije +198:Hiscore i Setup Opcije +199:Podesi tastere +200:Postavi ciljeve za rekorde skakaonica +201:Hill Maker +/202:Hill Menadzer + + +203:Vrati se u Glavni Setup Meni +204:Jezik? +205:Bip? +206:Nivo grafickih detalja? +207:Set imena komp. protivnika (NAMES?.SKI)? + +208:Stavke u sivom su dostupne +209:samo u registrovanoj verziji + +211:Vrati se u Glavni Setup Meni +212:Trening runde? +213:Dodatna statistika? +214:Pokazi rezultate sa razlikama? +215:Pokazi plasman SK-a sa razlikama? +216:Kompaktna tabela? +217:Nevidljive pozadine tabela? +/218:Preskoci nepotrebne kvalifikacije? +218:Automatski sacuvati snimke Rekorda skakaonica? +219:Nacrtaj ciljeve za rekorde skakaonica? +220:Izaberi gledanje kompjuterskih skakaca? +221:Izaberi mesto vetrometra +222:Koristi nok-aut sistem u 4 skakaonice? + +225:Izadji iz Hiscore Setup-a +226:Mogu li komp. skakaci da postave rekorde? +227:Dozvoli vise Identicnih imena na listi +228:Resetuj Hiscore-ove +229:Vrati Hiscore-ove +230:Vrati Default vrednosti Setupa + +231:Nikada +232:Ne na 4 skakaonice +233:Uvek + +235:Lider +236:Top 3 +237:Top 5 +238:Top 10 +239:Svi! +240:Niko + +242:Cilj +243:Koristi strelice, ESC izlazi + +245:Vec odlazis? +/Four letter words for the different lists +246:PRET +247:SLED +248:KRAJ + +251:Dakle odlazis... +252:Da li zaista zelis da iskljucis? +253:Oh, ovako rano odlazis? +256:Da li si siguran u vezi ovoga? +257:Da li si apsolutno siguran? +258:Pritisni D da napustis igricu. + +261:Ahaj! Moras imati cetiri (4) +262:ili osam (8) prijavljenih igraca +263:da bi igrao Timski Kup! +264:Idi i pitaj svoje drugove da se pridruze +265:ili samo kloniraj sebe cetiri puta. + +270:SJ3 Hill Maker +271:(koristi strelice, DEL, +272: ENTER ili ESC) +273:Ime fajla +274:Ime skakaonice +275:*Dodaj novu skakaonicu* +276:-Izlaz- +277:-Start- +278:Testiraj svoju skakaonicu! + +280:Strelica gore +281:Strelica levo +282:Strelica desno +283:Strelica dole + +285:(U)citaj set +286:(S)acuvaj set +287:(N)asumicni set +288:S(O)rtiraj po poenima u Svetskom Kupu +289:S(O)rtiraj po ukupnom broju poena + +290:Nisu pronadjeni snimci! +291:Autor: +292:Ime: +293:Ime fajla: +294:Skakaonica: +295:Izadji, nemoj da sacuvas +296:Izadji i sacuvaj +/The second letter is the key that will save the replay +298:(S)acuvaj snimak + +300:Skakaci +301:Izaberi skakace +302:*Kreiraj novog skakaca* + +304:Ime: +305:Pravo ime: +306:Boja odela: +307:Boja skija: +308:Menja: +309:Trener: +310:Preskoci kvalifikacije: +311:Resetuj skakaca +312:Izlaz + +313:Ukupno skokova: +314:Zavrsenih SK-a: +315:Pobeda: +316:Osvojenih SK-a: +317:Najbolji rezultat u SK-u: +318:Najbolji rezultat na 4S: +319:Najduzi skok u SK-u: +320:Najduzi skok: +321:Nivo Kralja skakaonice: + +322:(Koristi strelice, +323:ENTER edituje skakaca, +324:DEL sklanja iz redosleda) +325:ENTER prijavljuje skakaca, +326:DEL brise skakaca) + +328:Brise skakaca +329:Resetuje skakaca + +330:Kljucna mapa +331:Odraz +332:Rotiraj napred +333:Rotiraj nazad +334:Telemark doskok +335:Doskok na dve noge +336:Vraca default +337:Izlaz + +/Still some replay stuff +340:Vreme leta +341:Duzina +342:Brzina: +343:Napravljeni + +345:vec postoji. +346:Prekopiraj? + +350:Snimak je dobro sacuvan. +351:Snimak nije sacuvan. +352:Napravljeni set je dobro sacuvan. +353:Napravljeni set nije sacuvan. +354:Ekstra skakaonica je dobro sacuvana. +355:Ekstra skakaonica nije sacuvana. +356:Nisu pronadjeni napravljeni setovi! + +/Intro +360:Dobrodosao u SJ3 i sport skijaskih skokova. +361:Evo kratkog uvoda u igricu. +/361:Ovo je kratak uvod u igricu. + +362:Ideja u ovom sportu je da letis sto je duze +363:moguce i izvedes bezbedan doskok. + +364:Tvoj skakac sedi na klupi na pocetku +365:zaletista. Koristi strelicu desno kako bi poceo da klizis. + +/366:Vetrometar je lociran u donjem levom uglu +/367:ekrana. Vetar u glavu je bolji jer te podize. + +366:Vetrometar je lociran u donjem levom uglu. Vetar +367:u glavu (negativan) je bolji jer te podize. + +368:Kljuc uspesnog skoka je tajming kod +369:odraza. Koristi strelicu gore da se odrazis. + +370:Sada treba da rotiras skakaca napred da bi +371:smanjio otpor vetra. Koristi strelicu desno. + +372:Nekad te nalet vetra moze izbaciti iz +373:ravnoteze. Koristi strelicu levo da popravis poziciju. + +374:Kako se priblizavas zemlji bilo bi dobro da +375:pocnes da razmisljas o bezbednom doskoku skakaca. + +376:'T' taster oznacava Telemark doskok. Izvodi se +377:sporije i manje je bezbedan ali donosi bolje poene za stil. + +378:'R' taster oznacava doskok na dve noge, +379:bezbedniji je i dobar je za dugacke skokove. + +380:To je to! Mozes videti ovaj uvod ponovo iz +381:menija Snimci a za vise informacija, procitaj MANUAL.TXT. +/382:Srecno! + +390:Gore +391:Sredina +392:Dole +393:Levo +394:Centar +395:Desno +396:Skakac + +/Coaching +//The First One 401, 441, 481.. Indicates the Coaching Style +400:Trenerov ugao: +401:Profesionalan +402:Pokusaj da se ne spustis toliko u letu. +403:Dobra pozicija u letu. +404:Pozicija u letu ti je suvise uspravna. +405:Sledeci put - doskoci. +406:Zapocni doskok ranije. +407:Uh, steta za ovo. +410:To je bedan skok. +411:Jos uvek ne izgleda sjajno. +412:To je sasvim dobar skok. +413:Dobar skok. +414:Odlican skok! +415:Neverovatno! Skidam ti kapu! +418:Mnogo ranije se odrazi. +419:Suvise si zakasnio sa odrazom. +420:Tajming jos uvek malo kasni. +421:Bolji tajming ovog puta. +422:Savrsen tajming kod odraza! +423:Malo si poranio sa odrazom. +424:Nemoj tako rano da se odrazis. +425:To je ocajan odraz. Odrazi se mnogo kasnije. +428:Mislim mnogo ranije. +429:Ovog puta si jednostavno zakasnio. +430:Doskok je bio na samoj ivici. +431:Ok tajming kod doskoka. +432:To bi trebalo da ti donese dobre poene za stil. +433:Mogao si jos da cekas pre doskoka. +434:Nemoj da se plasis da letis duze. +435:Pritisni 'T' ili 'R' taster, molicu. + +441:Opusten +442:Au, ne rotiraj previse, covece. +443:To je slatka pozicija u letu. +444:Ne plasi se da se vise nagnes napred, sinovac. +445:Molim te doskoci sledeci put, to boli. +446:I dalje doskaces na lice, decko. +447:Pa, ne mozes uvek da ustanes, znas. +450:Previse si se opustio. +451:Jea, pokusaj da se ne oznojis. +452:To vec izgleda bolje. +453:To ja nazivam lepim letom. +454:O da, ribama ce se ovo dopasti! +455:To je ogromno! Zelim da upoznas Supermena! +458:Kakav bedan odraz... +459:Ako zelis da letis, odrazi se ranije. +460:Tajming ti nije sjajan. +461:Veoma dobar odraz, covece. +462:Hej, dopao mi se tvoj odraz! +463:Malo si poranio sa odrazom. +464:Nemoj da zuris sa odrazom. +465:Oh, povredices se jednog dana. +468:Trebao bi da poradis na tom doskoku. +469:Zar se ne plasis da ces poginuti? +470:Vau, taj doskok je bio na ivici. +471:Doskok - cvrst kao stena. +472:Oh, Mr. Perfektan Doskok je u gradu. +473:Nemoj da zuris sa osecajem za doskok... +474:Nemoj da se uplasis u letu. +475:Ne plasi se tastature, deckonjo. + +481:Strog +482:Suvise si se nagnuo napred u letu, glupane. +483:To je solidna pozicija u letu. +484:Casna sestro! Rotiraj u skoku kao muskarac. +485:O Boze! Gde ti je doskok? +486:Ne! Zapocni prokleti doskok na vreme! +487:Dizi zadnjicu i vrati se na posao! +490:Nikada nisam video gori skok. +491:Moja baba skace bolje od tebe. +492:Sta nije u redu? Hoces kuci kod mamice? +493:Mozes mnogo bolje. +494:Neki treneri bi bili srecni ovim. +495:Sada skaces kao sto sam ti rekao. +498:Ocajno! Gde ti je prokleti odraz! +499:Opet si se kasno odrazio. 50 sklekova! +500:Tajming ti je i dalje los. 25 sklekova! +501:Zar ne mozes da se odrazis malo ranije? +502:Sada je odraz kakav sam i zeleo da bude. +503:Prerano! Zar ne mozes da naucis? +504:Katastrofalan odraz! Uradi mi 50 sklekova! +505:Nikada nisam video gori odraz. Idi kuci. +508:Da li ti je doskok pretezak, mamina mazo? +509:Ne! Zapocni prokleti doskok na vreme! +510:Taj doskok je previse rizican. +511:To je skoro licilo na doskok. +512:Izgleda da je to dobar doskok. +513:Nemoj da se plasis doskoka. +514:Cega se plasis? Leti, do djavola! +515:Da li si glup? Doskoci ili idi kuci! + + +*N +Hrvatski +/ = Croatian +/Translated by Tomislav Pavlovic + +/Basic Items +1:Jedan +2:Dva +3:Tri +4:Cetiri +5:Pet +6:Sest +7:Ne +8:od +9:Nijedan +11:Registriran +12:Shareware +13:Normalan +14:Nizak +15:Pritisni tipku... + +17:Glavni izbornik +18:Izbornik skokova + +/Main Menu +20:Skoci! +/21:Upis skakaca +/21:Profili +21:Skakaci +22:Postavke +23:Kuca slavnih +24:Rekordi skakaonica +25:Snimka +26:Izlaz iz SJ3 + +27:SJ3 Svjetski kup +28:Osobni Svjetski kup +29:Turneja cetiri skakaonice +30:Ekipni kup +31:Kralj skakaonice +32:Trening +33:Povratak u glavni izbornik + +34:Skakaci: + +35:Ova verzija +36:je registrirana za: + +38:Ovo je neregistrirana +39:verzija SJ3. + +40:Procitajte Register.Txt sada! + +41:o tome kako postati najveca +42:faca u svojem susjedstvu, + +43:Zelite steci slavu medu +44:svojim prijateljima? Registriraj se, covjece! + +45:Ovo nije freeware igra. +46:Ucini pravu stvar, registriraj se. + +47:Samo su dva igraca dopustena +48:u ovoj neregistriranoj verziji! + +/Other Items +51:Trening +52:Zagrijavanje +53:Kvalifikacijski skok +54:Prvi skok +55:Drugi skok +56:Slijedeci... +57:Kompjuterski skakaci... +58:Startna vrata: +59:Pritisni (S) za glavni izbornik +60:S +/item 60 marks the letter that activates the setup menu +61:Upravo sada +62:Za trenutno prvo mjesto +63:Za pobjedu +65:Rekord skakaonice +67:Preostali skakaci: +68:Potrebno pobijediti: +69:Trenutno posljednji: +70:Trenutni poredak u svj. kupu +71:Trenutni poredak u ekipnom kupu +75:Propusta slijedece +76:skakaonice +77:skok +78:skakaonicu +79:je diskvalificiran! + +81:Poredak - Skok +82:Kvalifikacije - skok +83:od cetiri +84:Turneja cetiri skakaonice - Skok +85:Konacni rezultati turneje cetiri skakaonice +86:(kraca lista) +87:Poredak poslije skoka +88:Skakac +89:Statistika svjetskog kupa za +90:Konacni rezultati za + +91:Poredak ekipnog natjecanja nakon skoka +92:Konacni poredak ekipnog natjecanja +93:Statistika ekipnog natjecanja za +94:knock-out sustav parova +95:Poredak +96:Kralj skakaonice +97:Bodovi +98:sK +99:4 skakaonice: +100:Ukupno: +101:Izvan natjecanja: +102:Vise ne skacu: +103:Eliminirani skakaci: +104:U svlacionici: +105:Nisu vise medu nama: +106:Gdje? +107:Ekipa: +108:Mje +109:Bod +110:EK + +111:Spremi se za ekipni kup +112:Raspored ekipnog kupa: +113:Upisite ime ekipe: +114:Ekipa + +115:Najbolji rezultat: +116:Ucitaj skakaonice osobnog kupa +117:Spremi skakaonice osobnog kupa +118:Odaberi skakaonice za svoj osobni kup +/119:Koristi strelice, ENTER za biranje, ESC start +119:Koristi strelice, ENTER start, ESC izlaz + +120:Kompjuterski skakaci: +121:Zapocni *Kralja skakaonice* +122:Odaberi razinu tezine +123:Odaberi protivnike +124:Skakanje u: +125:Vjetar? +126:Skokovi? +127:Povratak u glavni izbornik +128:Novi rekord osobnog kupa! +129:Stari rekord: + +130:Razina tezine "Kralja skakaonice" +131:NAJTEZI IZAZOV +132:TVRDI ORASI +133:LAKSA VARIJANTA +134:LAKO POBJEDIVI +135:UMIROVLJENICI +136:OBICNE CURICE +137:OSOBNE POSTAVKE +138:Odaberi protivnika +139:Koristi strelice za odabir razine +140:ENTER odabir, ESC izlaz +141:Ime +142:Mjesto +143:Kraaaalj! + +/145:Upisi skakaca +146:(Koristi strelice, ENTER, DEL ili ESC) +/147:*Dodaj skakaca* +/148:Izlaz +/149:Odaberi boju opreme +150:(Koristi strelice, ENTER ili ESC) + +151:Gdje +152:zelis skakati +153:danas? +154:Izlaz +155:Nasumicni izbor skakaonice SK +156:Vise skakaonica... + +157:Stranica +158:Slijedeca stranica +159:Prosla stranica + +160:Izazovi kralja skakaonica +161:Nije dovrseno +162:Spremljeni najbolji rezultati osobnog kupa +163:Top 20 SJ3 rezultata svjetskog kupa +164:Top 10 rezultata ekipnog natjecanja +165:Top 5 rezultata turneje cetiri skakaonice +166:Ime +167:Mje +168:Bodovi +169:Kada? +170:Rekordi skakaonica +171:Tko? +172:Koliko? +173:Dokument +174:Bodovi +/Setup Menus +175:Pregled glavnog izbornika +176:Ovo su opcenite mogucnosti +177:Neke mogucnosti skakanja +178:Neke mogucnosti najboljih rezultata + +180:O, da +181:Naravno +182:Da, gospon +183:Aha +184:Kak ne +185:o, ne +186:Nema sanse +187:Nikako +188:A-a +189:Nis + +190:Vratiti na pocetne vrijednosti +191:Nula +192:najbolje rezultate? +193:Sigurno? +194:ce biti obrisani +195:Izlaz iz postavki + +196:Opcenite mogucnosti +197:Mogucnosti skakanja +198:Rekordi i mogucnosti skakanja +199:Promijeni tipke +200:Postavi cilj rekorda +201:Sagradi skakaonicu +/202:Uredivac skakaonica + + +203:Povratak u Setup.Main +204:Jezik? +205:Zvukovi? +206:Razina grafike? +207:Imena kompjuterskih skakaca (NAMES?.SKI)? + +208:Dijelovi otisnuti sivim su +209:dostupni samo u registriranoj verziji + +211:Povratak u glavni izbornik +212:Skokovi za trening? +213:Dodatna statistika? +214:Prikazi rezultate kao razliku? +215:Prikazi poredak svj. kupa kao razliku? +216:Kompaktni rezultati? +217:Nevidljiva pozadina rezultata? +/218:Preskoci nepotrebne kvalifikacije? +218:Automatski sa?uvati snimke rekorda skakaonica? +219:Pokazi trenutne rekorde skakaonica? +220:Odaberi gledanje kompjuterskih skakaca? +221:Odaberi mjesto mjeraca vjetra +222:Koristi knock-out sustav u cetiri skakaonice? + +225:Izlaz iz izbornika najboljih rezultata +226:Mogu li kompjuterski skakaci oboriti rekorde? +227:Dozvoli vise istih imena na popisu +228:Obrisi najbolje rezultate +229:Najbolje rezultate stavi na nulu +230:Vrati izvorne vrijednosti + +231:Nikada +232:Ne u cetiri skakaonice +233:Uvijek + +235:Vodeci +236:Top 3 +237:Top 5 +238:Top 10 +239:Sve! +240:Nikoga + +242:Cilj +243:Koristi strelice, ESC izlaz + +245:Vec odlazis? +/Four letter words for the different lists +246:PROS +247:SLIJ +248:GOTO + +251:Znaci ides... +252:Stverno zelis otici? +253:Odlazis ovako rano? +256:Jesi li siguran za to? +257:Jesi li sto posto siguran? +258:Stisni D da izades. + +261:Hej! Moras imati cetiri (4) +262:ili osam (8) upisanih igraca +263:prije ulaska u ekipni kup! +264:idi pitaj prijatelje da ti pomognu +265:ili se kloniraj cetiri puta. + +270:SJ3 uredivac skakaonica +271:(koristi strelice, DEL, +272: ENTER ili ESC) +273:Ime dokumenta +274:Ime skakaonice +275:*Dodaj novu skakaonicu* +276:-Exit- +277:-Start- +278:Isprobaj svoju skakaonicu! + +280:Strelica gore +281:Strelica lijevo +282:Strelica desno +283:Strelicu dolje + +285:(L)oad set +286:(S)ave set +287:(R)andom set +288:P(O)redaj prema bodovima u Svj.kupu +289:P(O)redaj prema ukupnim bodovima + +290:Nema snimke! +291:Autor: +292:Ime: +293:Ime dokumenta: +294:Skakaonica: +295:Izadi, bez spremanja +296:Izadi i spremi +/The second letter is the key that will save the replay +298:(S)acuvaj snimku + +300:Skakaci +301:Odaberi skakace +302:*Stvori novog skakaca* + +304:Ime: +305:Pravo ime: +306:Boja opreme: +307:Boja skija: +308:Zamijeni: +309:Trener: +310:Bez kval.: +311:Resetiraj skakaca +312:Izlaz + +313:Ukupno skokova: +314:Zavrsenih svjetskih kupova: +315:Pobjeda na skakaonicama: +316:Svjetski prvak: +317:Najbolje na svj. kupovima: +318:Najbolje na 4 skakaonice: +319:Najduzi skok u svj. kupu : +320:Najduzi skok: +321:Razina Kralja skakaonice: + +322:(Koristi strelice, +323:ENTER ureduje skakaca, +324:DEL brise iz poretka) +325:ENTER upisuje, +326:DEL brise skakaca) + +328:Brisati skakaca +329:Resetirati skakaca + +330:Pregled tipki +331:Odskok +332:Nagni se prema naprijed +333:Nagni se unatrag +334:Telemark +335:Dvonozni doskok +336:Vrati izvorno +337:Izlaz + +/Still some replay stuff +340:vrijeme u zraku +341:Duzina +342:Brzina: +343:Osobno + +345:Vec postoji. +346:Prepisati preko? + +350:Dokument snimke je uredno spremljen . +351:Dokument snimke nije spremljen. +352:Osobne promjene su uredno spremljene. +353:Osobne promjene nisu spremljene. +354:Dodatna skakaonica uredno spremljena. +355:Dodatna skakaonica nije spremljena. +356:Nije pronadena niti jedna osobna datoteka! + +/Intro +360:Dobro dosli u SJ3 i svijet skijaskih skokova. +361:Evo kratkog uvoda u igru. +/361:Ovo je brzo uvodenje u igru. + +362:Osnovni cilj ovog sporta je letjeti sto +363:je dalje moguce i izvesti siguran doskok. + +364:Vas skakac sjedi na gredi na pocetku spustanja. +365:Koristite strelicu udesno za spustanje. + +/366:Mjerac vjetra smjesten je dolje lijevo na +/367:zaslonu. Vjetar prema skakacu podize ga u letu. + +366:Mjerac vjetra smjesten je dolje lijevo. +367:Vjetar prema skakacu podize ga u letu. + +368:Kljuc uspjeha dobrog skoka je pravovremeni +369:odraz. Koristi strelicu gore za odraz. + +370:Sada bi trebao nagnuti skakaca prema naprijed +371:da smanjis otpor vjetra. Koristi strelicu desno. + +372:Ponekad te nalet vjetra moze izbaciti iz +373:ravnoteze. Koristi lijevu strelicu za vracanje. + +374:Kako se tlo priblizava bilo bi mudro +375:poceti misliti o sigurnom doskoku. + +376:Tipka 'T' zapocinje telemark. Sporiji je +377:i nesigurniji ali nosi vise bodova za stil. + +378:Tipka 'R' zapocinje sigurniji dvonozni +379:doskok, sigurniji za duze skokove. + +380:To je to! Mozes ponovno vidjeti uvod u +381:izbornikuk snimaka a za vise citaj MANUAL.TXT. +/382:Sretni skokovi! + +390:Vrh +391:Sredina +392:Dno +393:Lijevo +394:Srediste +395:Desno +396:Skakac + +/Coaching +//The First One 401, 441, 481.. Indicates the Coaching Style +400:Trenerovo videnje: +401:Profesionalni +402:Probaj ne dopustiti da ti je let tako nizak. +403:Dobra pozicija leta. +404:Previsok si u letu. +405:Napravi doskok slijedeci put. +406:Zapocni doskok ranije. +407:Uh, nije bilo srece. +410:Ovo je lose skakanje. +411:Jos uvijek ne izgleda dobro. +412:Ovo se jedva moze nazvati dobrim. +413:Dobar skok. +414:Izvrstan skok! +415:Nevjerojatno! Gdje ti je kraj! +418:Zapocni odskok mnogo ranije. +419:Odskok je bio prekasan. +420:Timing je jos uvijek prekasan. +421:Bolji timing ovaj put. +422:Izvrstan timing odskoka! +423:Prerano si odskocio. +424:Nemoj tako rano raditi odskok. +425:Ovo je bio uzasan odskok. Puno kasnije ga radi. +428:Mislio sam - mnogo ranije odskoci. +429:Bilo je jednostavno prekasno ovaj put. +430:Doskok je bio jedva na vrijeme. +431:Ok timing kod doskoka. +432:Ovo bi trebalo dati dobre ocjene za stil. +433:Mogao si jos pricekati prije doskoka. +434:Ne boj se skakati dulje. +435:Pritisni tipku 'T' ili 'R', molim. + +441:Opusten +442:Hej, ne naginji se toliko u skoku. +443:Ovo je krasan polozaj u letu. +444:Ne boj se nagnuti mallo vise, sine. +445:Slijedeci put doskoci, ovo je bolno. +446:Jos uvijek prizemljujes na lice, decko. +447:Pa, ne mozes ih sve preletjeti, znas? +450:Ovo je preopusteno. +451:Aha, ovo je bilo trapavo. +452:Ovo vec izgleda bolje. +453:Ovo ja nazivam dobrim letenjem. +454:O, da. Ovo koke vole! +455:Ovo je famozno! Idi sredi Supermena! +458:Dizi guzu na odskoku... +459:Ako zelis letjeti, odskoci ranije. +460:Timing ti bas nije sjajan. +461:Odskok je bas na vrijeme, covjece. +462:Hej, volim ovakav odskok! +463:Odskok je bio malo prerano. +464:Ne brzaj s odskokom. +465:Oh, ozlijedit ces se jednog dana. +468:Trebao bi malo poraditi na doskoku. +469:Zar se ne bojis da bi mogao umrijeti?.. +470:Uh, ovaj doskok je bio na rubu. +471:Doskok - siguran kao stijena. +472:Oho, gospodin Savrseni Doskok je u kvartu. +473:Ne prekidaj onaj osjecaj za doskok... +474:Ne trtari u letu. +475:Ne boj se tipkovnice, covjece. + +481:Strog +482:Prenagnut si u letu, stoko. +483:Ovo je pristojna pozicija za let. +484:Slabicu! Nagni se kao muskarac. +485:O Boze! Gdje ti je doskok? +486:Ne! Zapocni s vrazjim doskokom na vrijeme! +487:Dizi guzicu i natrag na posao! +490:Nikad nisam vidio losije skakanje. +491:Moja mama bolje skace od toga. +492:sto je bilo? Hoces doma mamici? +493:Mozes ti puno bolje. +494:Neki treneri bi bili zadovoljni s tim. +495:Sad skaces onako kako sam ti rekao. +498:Grozno! Gdje je vrazji odskok! +499:Opet kasnis s odskokom. 50 sklekova! +500:Timing ti je i dalje grozan. 25 sklekova! +501:Zar ne mozes odskociti ranije? +502:Sad je bio odskok kakav sam zelio. +503:Prerano! Zar ne mozes nauciti? +504:Katastrofa od odskoka! Odmah 50 sklekova! +505:Nikad nisam vidio losiji odskok. Brisi doma! +508:Je li doskok pretezak, mamina mazo? +509:Ne! Zapocni s vrazjim doskokom ranije! +510:Doskok ti je preriskantan. +511:Ovo je vec licilo na doskok. +512:Pretpostavljam da je ovo bio dobar doskok. +513:Nemoj se ustrtariti na doskoku. +514:cega se bojis? Leti, dovraga! +515:Jesi li glup? Doskoci ili idi doma! + +*O +Slovensky +/Translated by Martin Bubak and Lukas Laffers/ + +/Basic Items +1:Jeden +2:Dva +3:Tri +4:Styri +5:Pat +6:Sest +7:Nie +8:z +9:Ziadny +11:Registrovany +12:Shareware +13:Normalny +14:Nizky +15:Stlac klavesu... + +17:Hlavne Menu +18:Skokanske Menu + +/Main Menu +20:Skac! +/21:Sign Up Jumpers +/21:Profiles +21:Skokani +22:Nastavenia +23:Sien slavy +24:Rekordy mostikov +25:Opakovacky +26:Opusti SJ3 + +27:SJ3 Svetovy pohar +28:Vlastny SP +29:Turne 4 mostikov +30:Timovy pohar +31:Kral mostika +32:Trening +33:Spat do Hl. menu + +34:Skokani: + +35:Tato verzia +36:je registrovana na: + +38:Toto je neregistrovana +39:verzia SJ3. + +40:Precitaj si Register.Txt! + +41:Na to, ako byt najvacsi +42:boss vo svojom okoli. + +43:Chces ziskat respekt medzi +44:svojimi priatelmi? Zaregistruj sa. + +45:Tato hra nie je freeware. +46:Urob spravnu vec, zaregistruj sa. + +47: Maximalne dvaja hraci +48:v neregistrovanej verzii! + +/Other Items +51:Trening +52:Treningove kolo +53:Kvalifikacia +54:1. kolo +55:2. kolo +56:Nasleduje... +57:Skace pocitac... +58:Najazd: +59:Stlac (S) na Nastavenia +60:S +/item 60 marks the letter that activates the setup menu +61:V tejto chvili +62:Na vedenie +63:Na vitazstvo +65:Rekord mostika +67:Zostavajuci skokani: +68:Potrebujes prekonat: +69:Momentalne posledny: +70:Aktalne poradie SP +71:Aktualne poradie TP +75:Chybas nasledujuce +76:Preteky +77:Kolo +78:Pretek +79:je diskvalifikovany! + +81:Vysledkova listina - Pretek +82:Kvalifikacia - Pretek +83:zo 4 +84:Turne styroch mostikov - Pretek +85:Konecne vysledky turne styroch mostikov +86:(skratene vysledky) +87:Poradie po Preteku +88:Skokan +89:Statistiky Svetoveho Pohara pre +90:Konecne vysledky + +91:Poradie Timoveho Pohara po +92:Konecne vysledky Timoveho Pohara +93:Poradie timoveho pohara +94:Dvojice v knock - out systeme +95:Poradie +96:Kral mostika +97:Vysledok +98:SP +99:4 mostiky: +100:Celkom: +101:Mimo sutaze: +102:Uz neskacu: +103:Eliminovany skokani: +104:V satniach: +105:Uz viac nie medzi nami: +106:Kde? +107:Tim: +108:Poz +109:Bod +110:TP + +111:Priprav sa na Timovy pohar +112:Kalendar timoveho pohara: +113:Prosim pomenuj tim +114:Tim + +115:Najlepsi vysledok: +116:Nacitaj subor mostikov +117:Uloz subor mostikov +118:Vyber si mostiky pre tvoj SP +/119:Use Arrows, ENTER chooses, ESC starts +119:Pouzi sipky, ENTER vyber, ESC skonci + +120:Skokani (pocitac): +121:Zacni *Kral mostika* +122:Vyber si level +123:Vyber si protivnikov +124:Skakat v +125:Vietor? +126:Kola? +127:Spat do menu +128:Novy rekord pre subor mostikov! +129:Stary rekord: + +130:K.O.T.H Level +131:Pre fakt dobrych +132:Pre dobrych +133:Pre skoro dobrych +134:Pre supakov +135:Pre dochodcov +136:Pre tehotne zeny +137:Volitelny +138:Vyber si superov +139:Pre zmenu levela pouzi sipky +140:ENTER vyber, ESC skonci +141:Meno +142:Poradie +143:Kral!! + +/145:Zapis skokanov +146:(Pouzi sipky, ENTER, DEL alebo ESC) +/147:*Pridaj hraca* +/148:Koniec +/149:Vyber farbu kombinezy +150:(Pouzi sipky, ENTER alebo ESC) + +151:Kde +152:chces dnes +153:skakat? +154:Koniec +155:Nahodny mostik SP +156:Viac mostikov... + +157:Stranka +158:Dalsia stranka +159:Predosla stranka + +160:Kral mostika +161:nie je dokoncena +162:Naj skoky na volitelnych mostikov +163:Top 20 SJ3 Vysledkov SP +164:Top 10 Vysledkov TP +165:Top 5 Turne Styroch Mostikov +166:Meno +167:Pos +168:Body +169:Kedy? +170:Rekordy mostikov +171:Kto? +172:Kolko? +173:Subor +174:Body +/Setup Menus +175:Nastavenia +176:Zakladne nastavenia +177:Nastavenia skoku +178:Hiscore nastavenia + +180:Asi ze +181:Jasne +182:Ano +183:Hej +184:Suhlas +185:To nie +186:Nie +187:Nieee +188:Fakt nie +189:Nesuhlas + +190:Reset +191:Vynuluj +192:Hiscore? +193:Si si isty? +194:Idem vymazat +195:Opust nastavenia + +196:Zakladne nastavenia +197:Nastavenia skoku +198:Nastavenia Hiscore a moznosti +199:Nastavenia tlacidiel +200:Nastav ciele pre rekordy mostikov +201:Editor mostikov +/202:Manager mostikov + + +203:Spat do hl. menu +204:Jazyk? +205:Pipanie? +206:Detaily? +207:Mena protivnikov (NAMES.SKI)? + +208:Sede moznosti su dostupne +209:len v registrovanej verzii + +211:Spat do hlavnych nastaveni +212:Treningove kola? +213:Extra Statistiky? +214:Ukazovat vysledky s rozdielmi? +215:Ukazovat vysledky SP s rozdielmi? +216:Zuzena vysledkova listina? +217:Neviditelne pozadie vysledkov? +218:Automaticky ukladat rekordy (replay)? +;218:Preskocit zbytocnu kvalifikaciu? +;218:Preskocit kvalifikaciu? +219:Ukazat ciele mostikov? +220:Pocet sledovanych protivnikov? +221:Vyber miesto pre merac vetra +222:Pouzit KO system v T4M? + +225:Opusti nastavenia Hiscore +226:Zaznamenat rekordy skocene pocitacom? +227:Povolit viacej rovnakych mien +228:Resetovat Hiscore +229:Vynulovat Hiscore +230:Spat do zakladnych nastaveni + +231:Nikdy +232:Nie v T4M +233:Vzdy + +235:Lider +236:Top 3 +237:Top 5 +238:Top 10 +239:Vsetkych! +240:Ziadnych + +242:Ciel +243:Pouzi sipky, ESC ukonci + +245:Uz odchadzas? +/Four letter words for the different lists +246:PRED +247:DALS +248:UKON + +251:Aha, tak odchadzas... +252:Urcite chces odist? +253:Vzdavas to tak skoro? +256:Si si tym isty? +257:Si si tym uplne isty? +258:Stukni A pre koniec. + +261:Nazdar! Musis mat styroch (4) +262:alebo osmych (8) prihlasenych hracov +263:pred zacatim Timoveho Pohara! +264:Zozen si kamosov alebo +265:sa 4krat nakopiruj. + +270:SJ3 Vyroba mostikov +271:(pouzi sipky, DEL, +272: ENTER alebo ESC) +273:Meno suboru +274:Meno mostika +275:*Pridaj novy mostik* +276:-Koniec- +277:-Start- +278:Vyskusaj si svoj mostik! + +280:Sipka hore +281:Sipka dolava +282:Sipka doprava +283:Sipka dole + +285:(N)ahraj +286:(U)loz +287:(L)ubovolny zoznam +288:Z(O)rad podla bodov SP +289:Z(O)rad podla celkovych bodov + +290:Ziadne zaznamy! +291:Autor: +292:Meno: +293:Meno suboru: +294:Mostik: +295:Ukonci a neuloz +296:Ukonci a uloz +/The second letter is the key that will save the replay +298:(U)loz zaber + +300:Skokani +301:Vyber skokanov +302:*Vytvor noveho skokana* + +304:Meno: +305:Skut. meno: +306:Farba kombinezy: +307:Farba lyzi: +308:Vymen: +309:Trener: +310:Preskoc kval.: +311:Resetuj skokana +312:Koniec + +313:Celkovo skokov: +314:Skoncenych SP: +315:Vyhranych kol: +316:Vyhranych SP: +317:Naj SP: +318:Naj T4M: +319:Najdlhsi SP skok: +320:najdlhsi skok: +321:KOTH level: + +322:(Pouzi sipky, +323:ENTER upravi jumper, +324:DEL odstrani z poradia) +325:ENTER zapise, +326:DEL vymaze skokana) + +328:Vymaz skokana +329:Resetuj skokana + +330:Nastavenia klaves +331:Odraz +332:Dopredu +333:Dozadu +334:Telemark +335:Na obe nohy +336:Povodne nastavenia +337:Koniec + +/Still some replay stuff +340:Cas skoku +341:Dlzka skoku +342:Rachlost: +343:Vlastne + +345:uz existuje. +346:Prepisat? + +350:Opakovany zaber bol ulozeny. +351:Opakovany zaber sa neulozil. +352:Volitelne nastavenie bolo ulozene. +353:Volitelne nastavenie sa neulozilo. +354:Extra mostik bol ulozeny +355:Extra mostik nebol ulozeny. +356:Neboli najdene ziadne vlastne nastavenia. + +/Intro +360:Vitajte v SJ3 a vo svete skokov na lyziach +361:Tu je rychle uvedenie do hry. +/361:Thi is a quick introduction to the game. + +362:Podstata tohto sportu je letiet tak daleko +363:ako sa da a predviest bezpecne pristatie. + +364:Vas skokan sedi na lavici na zaciatku +365:najazdu. Pouzite sipku Doprava na spustenie sa . + +/366:The wind meter is located at the bottom left of the +/367:screen. Head wind is better as it increases lift. + +366:Ukazovatel vetra je v lavom dolnom rohu obrazovky. +367:Protivietor je lepsi pretoze zvysuje vztlak. + +368:Klucom k uspechu je spravne nacasovanie +369:odrazu. Stlacte sipku Hore pre odraz. + +370:Teraz mozete naklonit skokana dopredu pre +371:znizenie odporu vzduchu. Stlacte sipku Vpravo. + +372:Niekedy sa stane, ze vas vietor vyvedie z rovnovahy. +373:Stlacte sipku dolava, aby ste napravili svoju poziciu. + +374:Ako sa blizite k zemi, bolo by dobre +375:zacat premyslat o bezpecnom dopade. + +376:Tlacitkom ´T´ zacnete pristatie do telemarku. Je +377:pomalsie a riskantnejsie, ale lepsie bodovo hodnotene. + + +378:Klavesou ´R´ zacnete dopad na obe nohy, +379:ktory je bezpecnejsi a vhodny pre dlhe skoky. + +380:To je vsetko! Toto intro si mozete znovu pozriet v +381:ponuke ´Opakovacky´ pre viac info si pozrite README.TXT +/382:Happy jumpin'! + +390:Horny +391:Stredny +392:Dolny +393:Lavy +394:Stredny +395:Pravy +396:Skokan + +/Coaching +//The First One 401, 441, 481.. Indicates the Coaching Style +400:Okienko trenera: +401:Profesional +402:Nebud v lete tak zakloneny. +403:Dobra letova pozicia. +404:Nebud tak vzpriameny. +405:Nabuduce skus pristat. +406:Zacni skor s pristavanim. +407:Ach, co uz, to bola smola. +410:To je hrozny skok. +411:Stale to bohvieako nevyzera. +412:To je vcelku dobry skok. +413:Dobry skok. +414:Perfektny skok! +415:Neuveritelne! Kde mas plast? +418:Nabuduce sa odraz omnoho skor. +419:Odraz bol velmi oneskoreny. +420:Nacasovanie je stale trochu oneskorene. +421:Nacasovanie bolo tentokrat lepsie. +422:Perfektna presnost na odraze! +423:Prilis skoro si sa odrazil. +424:Neodrazaj sa tak skoro. + +425:To je hrozny odraz. Zacni s tym omnoho skor. +428:Myslel som tym este skor. +429:Tentokrat to proste bolo prilis neskoro. +430:Ten dopad bol sotva nacas . +431:Dobre nacasovane pristatie. +432:Z toho by mohli byt dobre body za styl. +433:Nemusel si tak skoro pristavat. +434:Neboj sa natiahnut let. +435:Stlac ´T´ alebo ´R´, prosim. + +441:Pohodak +442:Ach, nepretacaj ten skok, chlape. +443:Lahodna letova pozicia. +444:Neboj sa viac nalahnut, synu. +445:To muselo boliet. Nabuduce skus pristat. +446:Stale pristavas na ksicht, chlapce. +447:Ved vies, vsetko nemozes ustat. +450:To bolo prilis lezerne. +451:Aby si sa nepretrhol. +452:Uz to zacina vyzerat tak, ako by malo. +453:Tomuto ja hovorim dobry skok. +454:O ano, na toto budu pipky letiet! +455:To je parada! Rad by som ta zoznamil so Supermanom! +458:Pohni s tou prdelou na odraze... +459:Ak chces letiet, odraz sa skor. +460:Tvoj odraz nie je prave najslavnejsi. +461:Perfektny odraz, chlape. +462:Tento odraz zerem! +463:Odraz bol stale kus priskoro. +464:Neponahlaj sa tak s odrazom. +465:Oh, takto sa raz dolames. +468:Asi by si mal zapracovat na dopade. +469:Nebojis sa, ze raz sa zabijes?.. +470:Wow, to pristatie bolo len tak - tak. +471:Pristatie - Pevne ako Skala. +472:Ooh,mame tu pana Jemny Dopad. +473:Neponahlaj sa s tym pristatim... +474:Nabud poondiaty letiet dalej. +475:Neboj sa klavesnice, chlape + +481:Striktny +482:Prilis sa naklanas, hlupacik. +483:To je slusna letova pozicia. +484:Slaboch, skac ako chlap. +485:Oh Boze! A kde je pristatie? +486:Nie! Zacni s tym sprostym pristatim nacas! +487:Pohni zadkom a spat do prace! +490:Horsi skok som este nevidel. +491:To moja mama skace lepsie ako ty. +492:Co zase? Chces ist domov za maminkou? +493:Vies to este omnoho lepsie. +494:Ini treneri by s tym boli spokojni. +495:Teraz skaces, ako som ti kazal. +498:Otrasne! Kde je ten sprosty odraz! +499:Zase si sa neskoro odrazil. 50 klikov! +500:Odraz je stale na nic. 25 klikov! +501:Mohol by si sa odrazit trochu skor? +502:Konecne odraz, aky som chcel. +503:Neskoro! Co sa to nikdy nenaucis? +504:Katastrofalny odraz! 50 klikov, podme! +505:Horsi odraz som este nevidel. Chod domov. +508:Je to pristatie take tazke, mamickin maznacik? +509:Nie! Zacni s tym pristatim nacas! +510:To pristatie je prilis riskantne. +511:To uz takmer vyzeralo ako dopad. +512:Myslim, ze dopad bol v poriadku. +513:Nebud pri tom pristati taky poondiaty. +514:Coho sa bojis? Let, do frasa! +515:Co si sprosty? Pristan alebo chod domov! + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LOAD.PCX b/LOAD.PCX new file mode 100644 index 0000000..fa9460e Binary files /dev/null and b/LOAD.PCX differ diff --git a/LUMI.PAS b/LUMI.PAS new file mode 100644 index 0000000..d1ebfba --- /dev/null +++ b/LUMI.PAS @@ -0,0 +1,132 @@ +Unit Lumi; + + +INTERFACE + + +const LumiMax=256; + +procedure VieLmaara(InLmaara:Word); +procedure Update(var Buffer:Word;DeltaX,DeltaY,Tuuli:Integer;Draw:boolean); + + +IMPLEMENTATION + + +const SineLgt=512; { t„ytyy olla 2^n } + TaustaMin=64; { taustakuvan v„rit } + TaustaMax=215; { } +(* PerusG=600; { nopeus, jolla hiutaleet putoaa } + GVaihtelu=300; { putoamisnopeuden vaihtelu } + SivuLiike=50; { sivuttaisliikkeen suuruus } *) + + +type tLumi=record + + x,y:longint; + gravity:longint; + sin_pos:word; + c1,c2:word; + style:word; + + end; + + +var LH:array[0..LumiMax-1] of tLumi; + Sine:Array[0..SineLgt] of longint; + Max, PerusG, Gvaihtelu, SivuLiike : word; + Sleet : boolean; + + + +procedure Update; +var i,j:integer; + offset:word; + +begin + + if(Max>=LumiMax) then Max:=LumiMax-1; + + for i:=0 to Max do with LH[i] do + begin + if (draw) then + begin + inc(x,Sine[sin_pos]+DeltaX shl 9+Tuuli); + inc(sin_pos); sin_pos:=sin_pos and (SineLgt-1); + inc(y,gravity+DeltaY shl 8); + end; + offset:=(x shr 10)+(Y shr 10)*320; + if (offset<63679) and + (mem[Buffer:offset]>=TaustaMin) and + (mem[Buffer:offset+1]>=TaustaMin) and + (mem[Buffer:offset]1000) then Sleet:=true; + + if (Sleet) then { r„nt„„ } + begin + PerusG:=875; + GVaihtelu:=100; + SivuLiike:=50; + Max:=InLmaara-1000; + end; + + Reset; + +end; + + + + +begin + + Reset; + +end. \ No newline at end of file diff --git a/MAIN.PCX b/MAIN.PCX new file mode 100644 index 0000000..89ca7ec Binary files /dev/null and b/MAIN.PCX differ diff --git a/MAKI.PAS b/MAKI.PAS new file mode 100644 index 0000000..9ae1d25 --- /dev/null +++ b/MAKI.PAS @@ -0,0 +1,218 @@ + + Unit Maki; + +INTERFACE {ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ} + + type EPtr=Word; { "extended pointer" } + + const XSize=1024; + YSize=512; + Alue=XSize*YSize; { m„en koko } + Sivuja=16; + SivuKoko:Word=Alue div Sivuja; + + Graffa:EPtr=0; { osoite m„en grafiikkaan } + Video:EPtr=0; { osoite v„lipuskuriin } + + Lue:function(Osoite:LongInt):byte=nil; { lue tavu graffasta } + Kirjoita:procedure(Osoite:LongInt;Arvo:byte)=nil; { } + PaivitaRuutu:procedure=nil; { kopioi piirtobufferin n„yt”lle } + PiirraSprite:procedure(SpriteData,X,Y:Word)=nil; { sprite } + PaivitaKirjoitusSivu:procedure=nil; + + var LinjanPituus:Array[0..YSize-1] of Word; + ProfiiliY:Array[0..1300] of integer; + + X,Y:LongInt; + + procedure Tulosta; + function Alusta:Boolean; + procedure Lopeta; + procedure LukitseKirjoitusSivu(Sivu:LongInt); + procedure AllocLarge(var P:EPtr;Size:Longint); + + procedure LaskeLinjat(var KeulaX:integer;kr:integer;pk:single); + procedure AsetaMoodi(M:Word); + function Profiili(x:integer):integer; + + +IMPLEMENTATION {ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ} + + Uses WinAPI; {GlobalAlloc} + + + const SiirtoOsoite:LongInt=0; { m„en piirt„mist„ varten } + SivuPuskuri:pointer=nil; { -"- } + + procedure KopioiKirjoitusSivu;far;external; + function LueTavu(Osoite:LongInt):Byte;far;external; + procedure KirjoitaTavu(Osoite:LongInt;Arvo:byte);far;external; + procedure KopioiMaki(Osoite,Delta:LongInt);far;external; + procedure Sprite(SpriteData,X,Y:Word);far;external; + procedure KopioiRuutu;far;external; + {$l makilow.obj} + + procedure LukitseKirjoitusSivu(Sivu:longint); + begin if (Sivu$100000) then Size:=Size or $FFF; + Selector:=GlobalAlloc(gmem_fixed, Size); + asm mov AX,$0008 + mov BX,[Selector] + mov CX,word ptr [size+2] + mov DX,word ptr [size] + int $31 + jnc @End + mov [Selector],0 + @end: end; + if (Selector=0) then RunError(203); + P:=Selector; + end; + + +procedure AsetaMoodi(M:Word); +assembler;asm mov ax,[M];int $10;end; + +function Profiili(x:integer):integer; +var temp:integer; +begin + + temp:=0; + if (x>0) and (x<1300) then temp:=ProfiiliY[x]; + + Profiili:=temp; + +end; + +procedure LaskeLinjat; +{ linjojen pituudet voisi ladata nopeammin levylt„ ... } +var Y,X:LongInt; + paikka:LongInt; + c : byte; + FormerY : integer; + hp,x2,y2 : longint; +begin + + KeulaX:=0; + FormerY:=0; + + for Y:=0 to Maki.YSize-1 do + begin + LinjanPituus[Y]:=0; + for X:=0 to Maki.XSize-1 do + if(Lue((Y*Maki.XSize)+X)<>0) then + LinjanPituus[Y]:=X+1; + end; + +(* for Y:=0 to Maki.YSize-1 do + begin + for X:=0 to Maki.XSize-1 do + begin + LinjanPituus[Y]:=X; + if (Lue((Y*Maki.XSize)+X)=0) then X:=Maki.XSize-1; { ULOS } + end; + end; *) + + for X:=0 to Maki.XSize-1 do + begin + for Y:=0 to Maki.YSize-1 do + begin + ProfiiliY[X]:=Y; + + if (LinjanPituus[Y]>X) then Y:=Maki.YSize-1; +{ if (Lue((Y*Maki.XSize)+X)<>0) then Y:=Maki.YSize-1; } { ULOS } + end; + end; + + for X:=Maki.XSize to 1300 do + begin + ProfiiliY[X]:=ProfiiliY[Maki.XSize-1]; + end; + + + for X:=0 to Maki.XSize-1 do + begin + Y:=ProfiiliY[X]; + + if (Y-FormerY > 3) then KeulaX:=X; { etsit„„n keulan paikka } + FormerY:=Y; + end; + + dec(KeulaX,1); { se mennee yhden liian pitk„ksi } + + for X:=KeulaX to Maki.XSize-10 do { laskeutumisalueiden piirrot } + begin + + x2:=X-KeulaX; { suhteellinen keulan alap„„h„n X } + + y2:=ProfiiliY[X]-ProfiiliY[KeulaX]; { suhteellinen Y } + + hp:=round(sqrt((x2*x2)+(y2*y2))*pk*0.5)*5; { +10? } + + if (hp>=(2/3*kr)*10) and (hp<=(kr*12)) then + begin + if (hp0) then + LinjanPituus[Y]:=X+1; + end; + end; + +*) + + + function Alusta:Boolean; + begin Alusta:=True; + AllocLarge(Graffa,Alue*2+1024); + if(MaxAvail>=64000) then GetMem(SivuPuskuri,64000) + else RunError(203); + Video:=Seg(SivuPuskuri^); + PaivitaKirjoitusSivu:=KopioiKirjoitusSivu; + Kirjoita:=KirjoitaTavu; + PaivitaRuutu:=KopioiRuutu; + PiirraSprite:=Sprite; + Lue:=LueTavu; + end; + + procedure Lopeta; + begin end; + +end. diff --git a/MAKILOW.ASM b/MAKILOW.ASM new file mode 100644 index 0000000..163d2af --- /dev/null +++ b/MAKILOW.ASM @@ -0,0 +1,270 @@ +MODEL TPASCAL +IDEAL +JUMPS +P386 + +EXTRN SegA000:Word, Graffa:Word, SiirtoOsoite:dWord, SivuKoko:Word, \ + Video:Word, LinjanPituus:Word, X:dWord, Y:dWord + +PUBLIC KopioiKirjoitusSivu, LueTavu, KirjoitaTavu, \ + KopioiMaki, KopioiRuutu, Sprite + + rivinvaihto equ 704 + ruudunloppu equ 64000 + +; ========================================================================== + +MACRO Siirra label +label: + Mov EAX,[ESI] + Mov [ES:DI],EAX + Add ESI,4 + Add DI, 4 + Loop label +ENDM + +MACRO SiirraB label +label: + Mov al,[ESI] + Mov [ES:DI],al + Inc ESI + Inc DI + Loop label +ENDM + +CODESEG ;------------------------------------------------------------------- + +PROC KopioiKirjoitusSivu + Push DS + Mov ESI,[SiirtoOsoite] + Mov CX, [SivuKoko] + Mov ES, [Video] + Xor DI, DI + Mov DS, [Graffa] + Shr CX, 2 + +@kks_loop1: + Mov EAX,[ES:DI] + Mov [ESI],EAX + Add ESI,4 + Add DI, 4 + Loop @kks_loop1 + + Pop DS + RET +ENDP + +PROC LueTavu Osoite:dWord + Mov ES, [Graffa] + Mov EDI,[Osoite] + Mov AL, [ES:EDI] + RET +ENDP + + +PROC KirjoitaTavu Osoite:dWord, Arvo:Byte + Mov ES, [Graffa] + Mov EDI,[Osoite] + Mov AL, [Arvo] + Mov [ES:EDI],AL + RET +ENDP + +PROC KopioiMaki AlkuOsoite:dWord, Delta:dWord + Mov AX, DS + Mov GS, AX + Mov ES, [Video] + Xor DI, DI + Lea BX, [LinjanPituus] + Mov AX, [word Y] + Add BX, AX + Add BX, AX + Mov DS, [Graffa] + Mov ESI,[AlkuOsoite] + +@km_seuraavalinja: + Mov DX, [GS:BX] + Mov EAX,[GS:X] + Add ESI,EAX + Sub DX, AX + Jle @km_SkyOnly + Cmp DX, 320 + Jae @km_GroundOnly + +@km_skip0: + Mov CX, DX + Shr CX, 2 + Jz short @km_skip1 + Siirra @km_loop1 + @km_skip1: + Mov AX, DX + And AX, 3 + Cmp AX, 1 + Jl short @km_tapaus1 + Je short @km_tapaus2 + Ja short @km_tapaus3 + + @km_tapaus4: + Mov AX,[ESI] + Mov cl,[ESI+2] + Mov [ES:DI],AX + Mov [ES:DI+2],cl + Add ESI,[Delta] + Mov al,[ESI+3] + Mov [ES:DI+3],al + Jmp short @km_jatka + + @km_tapaus3: + Cmp AX,3 + Je short @km_tapaus4 + Mov AX,[ESI] + Mov [ES:DI],AX + Add ESI,[Delta] + Mov AX,[ESI+2] + Mov [ES:DI+2],AX + jmp short @km_jatka + + @km_tapaus2: + Mov al,[ESI] + Mov [ES:DI],al + Add ESI,[Delta] + Mov cl,[ESI+1] + Mov AX,[ESI+2] + Mov [ES:DI+1],cl + Mov [ES:DI+2],AX + jmp short @km_jatka + + @km_tapaus1: + Add ESI,[Delta] + Mov EAX,[ESI] + Mov [ES:DI],EAX + + @km_jatka: + Add ESI,4 + Add DI, 4 + Mov CX, DX + Shr CX, 2 + Neg CX + Add CX, 79 + Jle short @km_skip2 + Siirra @km_loop2 + @km_skip2: + Sub ESI,[GS:X] + Sub ESI,[Delta] + Add BX,2 + Add ESI,RivinVaihto + cmp DI,ruudunloppu + Jb @km_seuraavalinja + jmp short @km_loppu + + @km_skyonly: + Add ESI,[Delta] + Mov CX, 80 + Siirra @km_loop3 + jmp short @km_skip2 + + @km_groundonly: + Mov CX, 80 + Siirra @km_loop4 + Add ESI,[Delta] + jmp short @km_skip2 + +@km_loppu: + Mov AX, GS + Mov DS, AX + + RET +ENDP + + +PROC KopioiRuutu + Push DS + Mov ES, [SegA000] + Xor DI, DI + Mov DS, [Video] + Xor ESI,ESI + Mov CX, 16000 + + Siirra @dkm_loop1 + + Pop DS + RET +ENDP + + +PROC Sprite SpriteData:Word, _X_:Word, _Y_:Word +local Height:word + Push DS + Mov ES,[Video] + Mov AX,[_Y_] + Mov DI,AX + Shl AX,8 ;DI=Y*320 + Shl DI,6 ; + Add DI,AX + Add DI,[_X_] ;DI+X + Mov DS,[SpriteData] + Mov SI,4 + Mov DX,[DS:0] + Mov BX,DX ;BX=skip + Add BX,[_X_] + Sub BX,320 + Ja @s_skip2 + Xor BX,BX ;BX=0 +@s_skip2: + Sub DX,BX + Jle short @s_quit + Mov AX,[DS:2] + Mov [Height],AX +@s_loop1: + Mov CX,DX +@s_loop2: + LodSB + Cmp al,0 + Jz short @s_skip1 + Mov [ES:DI],al +@s_skip1: + Inc DI + loop @s_loop2 + Add DI,320 + Add SI,BX + Sub DI,DX + Dec [Height] + Jnz short @s_loop1 +@s_quit: + Pop DS + RET +ENDP + +PROC OldSprite SpriteData:Word, _X_:Word, _Y_:Word + Push DS + Mov ES,[Video] + Mov AX,[_Y_] + Mov DI,AX + Shl AX,8 ;DI=Y*320 + Shl DI,6 ; + Add DI,AX + Add DI,[_X_] ;DI+X + Mov DS,[SpriteData] + Mov SI,4 + Mov DX,[DS:0] + Mov BX,[DS:2] +@os_loop1: + Mov CX,DX +@os_loop2: + LodSB + Cmp al,0 + Jz short @os_skip1 + Mov [ES:DI],al +@os_skip1: + Inc DI + loop @os_loop2 + Add DI,320 + Sub DI,DX + Dec BX + Jnz short @os_loop1 + Pop DS + RET +ENDP + +ENDS +END ;----------------------------------------------------------------------- diff --git a/MOREHILL.SKI b/MOREHILL.SKI new file mode 100644 index 0000000..573541a --- /dev/null +++ b/MOREHILL.SKI @@ -0,0 +1 @@ +0 diff --git a/NAMES0.SKI b/NAMES0.SKI new file mode 100644 index 0000000..8730755 --- /dev/null +++ b/NAMES0.SKI @@ -0,0 +1,152 @@ +*** Original names v3.11 - DO NOT EDIT *** +Roar Lj›kels›y +Sigurd Pettersen +Janne Ahonen +Adam Malysz +Tami Kiuru +Martin H”llwarth +Sven Hannawald +Veli-Matti Lindstr”m +Bj›rn Einar Rom›ren +Matti Hautam„ki +Noriaki Kasai +Michael Uhrmann +Andreas Widh”lzl +Thomas Morgenstern +Tommy Ingebrigtsen +Peter Zonta +Akseli Kokkonen +Maximilian Mechler +Andreas Kofler +Andreas Goldberger +Georg Sp„th +Rok Benkovic +Hiroki Yamada +Anders Bardal +Martin Schmitt +Stephan Hocke +Jussi Hautam„ki +Hideharu Miyahira +Henning Stensrud +Andreas Kttel +Kazuyoshi Funaki +Simon Ammann +Florian Liegl +Emmanuel Chedal +Reinhard Schwarzenberger +Alexander Herr +Alexei Silaev +Clint Jones +Balthasar Schneider +Marcin Bachleda +Morten Solem +Jakub Janda +Robert Kranjec +Denis Kornilov +Jens Salum„ +Lars Byst›l +Dimitri Vassilev +Damjan Fras +Jan Matura +Primoz Peterka +Christian Nagiller +Harri Olli +J”rg Ritzerfeld +Olav Magne D›nnem +Martin Mesik +Stefan Pieper +Jan Mazoch +Chil Gu Kang +Dimitri Ipatov +Wojciech Tajner +Kim-Roar Hansen +Arttu Lappi +Tomislaw Tajner +Yong Jik Choi +Primoz Pikl +Radik Zhaparov +Martin Koch +Nicolas Dessum +Jaan Juris +Johan Eriksson +Wolfgang Loitzl +Bine Norcic +Michael Neumayer +Chrostoph Kreuzer +Robert Mateja +Trainee +*** TEAMS (and line-ups) *** +Germany +21 +18 +12 +7 +Austria +19 +14 +13 +6 +Finland +10 +8 +5 +3 +Japan +31 +28 +23 +11 +Norway +15 +9 +2 +1 +Poland +63 +60 +40 +4 +Slovenia +48 +43 +22 +16 +Switzerland/Czech Rep. +57 +49 +32 +30 +Russia +59 +47 +44 +37 +Finland II +62 +52 +27 +17 +Austria II +39 +35 +33 +20 +Germany II +53 +36 +26 +25 +Norway II +46 +41 +29 +24 +Rest of the world +58 +55 +38 +34 +3278836 + + + diff --git a/NAMES1.SKI b/NAMES1.SKI new file mode 100644 index 0000000..f87dfa7 --- /dev/null +++ b/NAMES1.SKI @@ -0,0 +1,156 @@ +*** THE-COOL-DUDES-LIST :) *** +Matti Nyk„nen +Mika H„kkinen +Dennis Rodman +Kofi Annan +Teemu Sel„nne +Haile Gebreselassie +Kimi R„ikk”nen +Jasser Arafat +Bootsy Collins +Noam Chomsky +David Hasselhoff +Marcus Garvey +Simon Bolivar +Jari Litmanen +Alexander Karelin +Tommi M„kinen +Mika Salo +Saku Koivu +Hanno M”tt”l„ +Pete Sampras +Keke Rosberg +Jari Kurri +Tiger Woods +Wayne Gretzky +Desmond Tutu +Nelson Mandela +Ralph Nader +Leonard Peltier +Sergei Bubka +Muammar Gaddafi +Isaac Newton +Abraham Simpson +Paavo Nurmi +Subcomandante Marcos +Jello Biafra +Muhammad Ali +Carlton Ridenhour +Alfred E. Neuman +Marcus Allen +M.A. Numminen +Mahatma Gandhi +Matt Lukin +Peter Tosh +Henry Rollins +George Clinton +Fidel Castro +Linus Torvalds +Orson Welles +Daniel Quinn +George Orwell +Salvador Allende +Eddie Murphy +Conan O'Brien +Jim Osterberg +Susan Sontag +Edwin Moses +Michael Moore +Burt Bacharach +Greg Graffin +Reggie Dunlop +Tom Morello +Ricardo Tubbs +Pope John Paul XIV +Richard Dean Anderson +Elvis Costello +Busta Rhymes +Mumia Abu-Jamal +Dennis Banks +Russell Means +Jan Palach +Rudi Dutschke +Tommie Smith +John Carlos +Adam Yauch +Naomi Klein +Young Soldier +*** TEAMS (and line-ups) *** +Puijo Ski Team +1 +2 +3 +4 +Oslo Ice Fishers +5 +6 +7 +8 +North Canada Eskimos +9 +10 +11 +12 +Cairo Camel Riders +13 +14 +15 +16 +Santa Monica Ski Club +17 +18 +19 +20 +Kamikaze, Japan +21 +22 +23 +24 +Dallas Skiboys +25 +26 +27 +28 +The New York Homeless +29 +30 +31 +32 +Michael Knights +33 +34 +35 +36 +Moscow Millionares +37 +38 +39 +40 +Haiti Voodoos +41 +42 +43 +44 +Rastafarians, Jamaica +45 +46 +47 +48 +The Kingston Selassiemen +49 +50 +51 +52 +Stockholm Gravediggers +53 +54 +55 +56 + + + + + + + + diff --git a/NAMES2.SKI b/NAMES2.SKI new file mode 100644 index 0000000..de37543 --- /dev/null +++ b/NAMES2.SKI @@ -0,0 +1,159 @@ +*** Ski Jumping Season 1987-1988 *** +Matti Nyk„nen +Pavel Ploc +Primoz Ulaga +Jiri Parma +Ernst Vettori +Jens Weissflog +Erik Johnsen +Miran Tepes +Ole-Gunnar Fidjest”l +Jan Bokl”v +Andreas Bauer +Vegard Opaas +Staffan T„llberg +Ole-Christian Eidhammer +Dieter Thoma +Jon-Inge Kj”rum +Josef Heumann +Franz Wiegele +Ari-Pekka Nikkola +Rajko Lotric +Jari Puikkonen +Christian Hauswirth +Andi Felder +Ladislav Dluhos +Heinz Kuttin +Werner Schuster +Hroar Stjernen +Tuomo Ylipulli +Mike Holland +Horst Bulau +Martin Svagerko +Remo Lederer +Heikki Ylipulli +Gnther Stranner +Oliver Strohmaier +Pekka Suorsa +Jiri Malec +Kai Nokelainen +Matjaz Debelak +Didier Mollard +Fabrice Piazzini +Steve Collins +Jouni Johansen +Todd Gillmann +Magnus Aastr”m +Thomas Klauser +Risto Laakkonen +Christoph Lehmann +Per-Inge T„llberg +Virginio Lunardi +Werner Haim +Roberto Cecon +Robert Kopac +Mikael Martinsson +Jan-Henrik Troen +Anssi Nieminen +Heiko Hunger +Pjotr Fijas +Ron Richards +Ulf Findeisen +Sandro Sambugaro +Gerard Balanche +Peter Rohwein +Anders Daun +Vesa Hakala +Steinar Braaten +Andzey Verveikin +Takeshi Katshushi +Thomas Dolar +Mark Konopacke +Vladimir Breitschev +Halvor Persson +Zbigniew Klimowski +Udo Okraffka +Kimmo Kylm„aho +Trainee +*** TEAMS (and line-ups) *** +West Germany +46 +17 +15 +11 +Finland +28 +21 +19 +1 +Austria +25 +23 +18 +5 +Czechoslovakia +31 +24 +4 +2 +Norway +14 +12 +9 +7 +Yugoslavia +39 +20 +8 +3 +Sweden +49 +45 +13 +10 +Canada +59 +44 +42 +30 +East Germany +60 +57 +32 +6 +Italy/France +61 +52 +50 +40 +Switzerland +62 +48 +41 +22 +Finland II +43 +38 +36 +33 +Austria II +51 +35 +34 +26 +Norway II +66 +55 +27 +16 +3065474 + + + + + + + + + + diff --git a/PLAYERS.SKI b/PLAYERS.SKI new file mode 100644 index 0000000..7abd986 --- /dev/null +++ b/PLAYERS.SKI @@ -0,0 +1,28 @@ +1 +*1 +SKI JUMPER +0 +0 +1 +0 +0 +0 +0 +0 +930 +1 +930 +1 +HILLBASE +0 (-) +0 +- +0 +1 +2 + +0 +0 +15942 + + diff --git a/PRNEW.BAT b/PRNEW.BAT new file mode 100644 index 0000000..4f5c8b7 --- /dev/null +++ b/PRNEW.BAT @@ -0,0 +1,38 @@ +@ECHO OFF +IF %1 == "" GOTO ERROR1 +IF EXIST D:\OUT\SJ31%1.ZIP GOTO Q1 +GOTO CONT + +:Q1 +ECHO Hey, the entry %1 already exists, still continue? +PAUSE +ECHO . +GOTO CONT + +:CONT +D: +CD D:\SJ3\CODE\313 +D:\code\bp\bin\BPC.EXE -CP -$E- -$G+ -$N+ -$D- -$L- -$Y- -$M49152,0,655360 SJ3.PAS +IF NOT ERRORLEVEL 0 GOTO ERROR2 +ECHO . + +MOVE D:\SJ3\CODE\313\SJ3.EXE D:\SJ3\CODE\313\REGPACK\ +rem @ECHO %1 %rname %_date >> d:\out\packlog.txt + +CD D:\SJ3\CODE\313\REGPACK + +D:\SYS\PKZIP d:\out\sj31%1.zip @d:\sj3\code\313\packreg.lst + +CD .. +GOTO END +:ERROR2 +ECHO Error: Could Not Compile. +GOTO END + +:ERROR1 +ECHO Error: Missing Arguments. +GOTO END + +:END +ECHO All done. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..bc0cad8 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Ski Jump International v3 + +![Cover](https://github.com/suomipelit/skijump3/blob/master/COVER.PNG) + +[Original website](https://www.nomasi.com/sj3/) + +Huge thanks for original author Ville KÃļnÃļnen for open-sourcing this +absolute classic gem from the good old DOS days. + +## Build + +Currently only DOS build is supported. + +### Compiling for DOS + +Install [DOSBox](https://www.dosbox.com/) and Borland Pascal 7.0 +compiler. + +Navigate to root of Ski Jump International 3 repository. + +Set `BP_PATH` variable to point to the compiler, e.g. `SET BP_PATH=C:\BP` + +Execute `COMP.BAT`. Start created `SJ3.EXE`. diff --git a/REGFREE.PAS b/REGFREE.PAS new file mode 100644 index 0000000..68301bb --- /dev/null +++ b/REGFREE.PAS @@ -0,0 +1,2 @@ +regname:string[40]='Everyone - Thanks for the support!'; +regnumber:string[6]='00000'; diff --git a/REGSTAT.PAS b/REGSTAT.PAS new file mode 100644 index 0000000..02a5823 --- /dev/null +++ b/REGSTAT.PAS @@ -0,0 +1 @@ +{$DEFINE REG} diff --git a/SJ3.PAS b/SJ3.PAS new file mode 100644 index 0000000..88217ac --- /dev/null +++ b/SJ3.PAS @@ -0,0 +1,5904 @@ +program Skijump3; { Reality Strikes } +uses crt, dos, sj3graph, sj3pcx, sj3unit, sj3help, sj3info, + sj3list, sj3table, maki, lumi, tuuli, sj3lang, sj3repl; + +const + + {$I REGSTAT.PAS} + + {$I REGFREE.PAS} + +var + + version : string[10]; + + ActHill : hill_type; + + nosamename, automatichrr : boolean; + + jmaara : byte; + nytmaki : integer; + + wcup, jcup, cupslut : boolean; + + reg : boolean; + + Today : Date; + Now, Start : Time; + + Stats : array [0..15,0..NumWCHills] of Stat_type; + CStats : array[0..2,1..NumPl+1] of integer; + +{ ex, ok, }eka,treeni : boolean; + compactlist, comphrs : boolean; + diff,diffwc,lct, InvBack, beeppi, goals, kosystem : boolean; + + trainrounds, windplace{,skipquali} : byte; + + sija, qual, inj : array [0..NumPl+1] of byte; + + pisteet : array[0..NumPl+1] of integer; + mcpisteet : array[0..NumPl+1] of integer; + fourpts : array[0..NumPl+1] of longint; + + CupStyle : byte; + CupHills : integer; + + mcluett : array[0..NumPl+1] of byte; + luett : array[0..NumPl+1] of byte; + + K : array[0..5] of word; + +(* + haalarit : array[0..MaxOwnPl] of byte; + sukset : array[0..MaxOwnPl] of byte; { profileen... } +*) + + osakilpailu,kierros,startgate : integer; + + HillOrder : array[0..41] of integer; + SetFile : string; { pakko olla global, muuten se unohtuu } + + koth, kothwind : boolean; + kothmaara,kothpack, kothrounds : byte; + kothmaki : integer; + kothpel : array[0..20] of byte; + +{ startday : word; } + + namenumber : char; + languagenumber : byte; + gdetail, seecomps : byte; + + teamlineup : array[0..60] of byte; + + KeulaX : integer; { oltava global? + juu, koska se lukee sen vain m„en latauksessa, + ja muuten se unohtuu... } + + ThisIsAHillRecord : integer; + + + + +Procedure EGAVGADriverProc; external; +{$L EGAVGA.OBJ} + + +procedure MakeSendMe; +begin + CallSendme(version,regname,regnumber,Today,Now,vcode); +end; + + +procedure WriteRecords; +var l1,l2 : longint; + f1 : text; + temp : integer; + str1 : string; +begin + + l1:=0; l2:=0; + + assign(f1,'HISCORE.SKI'); + rewrite(f1); { topten } + + writeln(f1,'HISCORE.SKI - !!! DO NOT ATTEMPT TO EDIT THIS FILE !!!'); + + for temp:=1 to 41 do { 20 world cupia, 10 teamia, 5 4hillsia ja 6 kothia } + begin + str1:=top[temp].name; + writeln(f1,str1); + inc(l1,valuestr(top[temp].name,temp)); + str1:=crypt(top[temp].pos,temp); + writeln(f1,str1); + inc(l2,valuestr(str1,temp)); + str1:=crypt(top[temp].score,temp); + writeln(f1,str1); + inc(l2,valuestr(str1,temp)); + end; + + for temp:=1 to NumWCHills do + begin + str1:=HRname(temp); + writeln(f1,str1); + inc(l1,valuestr(HRname(temp),temp)); + str1:=crypt(HRLen(temp),temp); + writeln(f1,str1); + inc(l2,valuestr(str1,temp)); + end; + + l1:=l1 xor 734697; + + writeln(f1,l1); + writeln(f1,l2); + + str(l1+l2+53,str1); + writeln(f1,valuestr(str1,22)); + + for temp:=1 to 41 do + writeln(f1,top[temp].time); + + for temp:=1 to NumWCHills do + writeln(f1,HRtime(temp)); + + makevcode(version,reg); + writeln(f1,vcode); + + close(f1); + + +end; + +procedure WriteConfig; +var f2 : text; + temp : integer; +begin + + assign(f2,'CONFIG.SKI'); + rewrite(f2); { CONFIG } + + writeln(f2,integer(reg)); + writeln(f2,integer(comphrs)); + writeln(f2,integer(lct)); + writeln(f2,integer(diff)); + writeln(f2,integer(compactlist)); + writeln(f2,integer(invback)); + writeln(f2,integer(automatichrr)); + writeln(f2,integer(beeppi)); + writeln(f2,integer(nosamename)); + writeln(f2,integer(goals)); + writeln(f2,integer(diffwc)); + writeln(f2,integer(kosystem)); + + writeln(f2,languagenumber); + writeln(f2,trainrounds); + writeln(f2,namenumber); + writeln(f2,Setfile); + + writeln(f2,gdetail); + writeln(f2,seecomps); + writeln(f2,'0'); + writeln(f2,'0'); + writeln(f2,'0'); + + writeln(f2,jmaara); + + for temp:=1 to jmaara do writeln(f2,jnimet[16-temp]); + + writeln(f2,pmaara); + + for temp:=1 to pmaara do + begin + writeln(f2,profileorder[temp]); + +{ writeln(f2,nimet[NumPl+1-temp]); + writeln(f2,haalarit[temp]); } + end; + + if (kothwind) then temp:=1 else temp:=0; + writeln(f2,temp); + + writeln(f2,kothrounds); + + writeln(f2,kothpack); + writeln(f2,kothmaki); + writeln(f2,kothmaara); + + for temp:=1 to kothmaara do + writeln(f2,kothpel[temp]); + + for temp:=1 to 5 do writeln(f2,K[temp]); { n„ppiskomennot } + + writeln(f2,windplace); + + for temp:=1 to 2 do + writeln(f2,'0'); +(* + writeln(f2,integer(BackGrSound)); + writeln(f2,integer(SBSounds)); + writeln(f2,SoundBankNumber); + + writeln(f2,BaseIO); + writeln(f2,IRQ); + writeln(f2,DMA); *) + + close(f2); + +end; + + +procedure ResetHiscore(kerroin:byte); +var temp : integer; + name : NameStr; + len : integer; + time : TimeStr; + +begin + + GetNow(Now); + + ResetTops(kerroin,Today,Now); + + WriteRecords; + +end; + +procedure ResetConfig; +var temp:integer; +begin + + kothmaara:=1; + for temp:=1 to 20 do kothpel[temp]:=temp; + + pmaara:=1; + for temp:=1 to 20 do profileorder[temp]:=0; + profileorder[1]:=1; + + jmaara:=1; + + { configien nollaus ocks† } + + languagenumber:=255; { se kysyy sitten alussa } + + beeppi:=false; + gdetail:=0; + + namenumber:='0'; + + trainrounds:=0; +{$IFDEF REG}lct:=true;{$ELSE}lct:=false;{$ENDIF} + + diff:=false; diffwc:=false; + compactlist:=false; + invback:=false; + automatichrr:=true; + + goals:=true; + kosystem:=true; + seecomps:=1; + + comphrs:=true; + nosamename:=false; + + DefaultKeys(K); + windplace:=1; + + Setfile:='TEMP'; + + WriteConfig; + +end; + + +procedure ReadRecords; +var l1,l2,l3,l4,l5 : longint; + f1 : text; + temp : integer; + str1 : string; + name : NameStr; + len : integer; + time : TimeStr; + +begin + + l1:=0; l2:=0; l3:=0; l4:=0; l5:=0; + + str1:='HISCORE.SKI'; + + assign(f1,str1); + {$I-} + reset(f1); + {$I+} + Fileok(IOresult,str1); + + readln(f1,str1); { se varoitusrivi pois sielt„ } + + for temp:=1 to 41 do { 20 World Cup, 10 Team Cupia, 5 4hillsia ja 6 Kothia } + begin + readln(f1,top[temp].name); +{ topnimet[a]:=cryptstr(topnimet[a]); } + inc(l1,valuestr(top[temp].name,temp)); + readln(f1,str1); + inc(l2,valuestr(str1,temp)); + top[temp].pos:=uncrypt(str1,temp); + readln(f1,str1); + inc(l2,valuestr(str1,temp)); + top[temp].score:=uncrypt(str1,temp); + end; + + for temp:=1 to NumWCHills do { katso mit„ tehd„„n kun tehd„„n lis„„ m„ki„ } + begin + readln(f1,name); + inc(l1,valuestr(name,temp)); + readln(f1,str1); + inc(l2,valuestr(str1,temp)); + len:=uncrypt(str1,temp); + SetHRInfo(temp,name,len,time); + end; + + l1:=l1 xor 734697; + + readln(f1,l3); + readln(f1,l4); + readln(f1,l5); + + str(l1+l2+53,str1); + + for temp:=1 to 41 do + readln(f1,top[temp].time); + + for temp:=1 to NumWCHills do + begin + name:=HRName(temp); + len:=HRLen(temp); + readln(f1,time); + SetHRInfo(temp,name,len,time); + end; + +{ writeln(l5); + writeln(valuestr(s,22)); + readln; } +{ writeln('L1',l1,' - ',l3); + writeln('L2',l2,' - ',l4); + readln; } + + vcode:=0; + {$I-} readln(f1,vcode); {$I+} + if (vcode=0) or (IOResult<>0) then vcode:=1; { pre-v3.11 } + + close(f1); + + if (l1<>l3) or (l2<>l4) or (valuestr(str1,22)<>l5) then + begin + AsetaMoodi($3); + writeln('Error #21A: Something doesn''t add up in the HISCORE.SKI file.'); + writeln('Maybe you tried to edit it or something. Please don''t do it again.'); + ResetHiscore(1); + ResetConfig; + Waitforkey; + Halt; + end; +end; + + + +procedure ReadConfig; +var f2 : text; + str1 : string; + temp : integer; +begin + + str1:='CONFIG.SKI'; + assign(f2,str1); + {$I-} + reset(f2); + {$I+} + Fileok(IOResult,str1); + + readln(f2,temp); + readln(f2,temp); + comphrs:=boolean(temp); + readln(f2,temp); + {$IFDEF REG}lct:=boolean(temp);{$ELSE}lct:=false;{$ENDIF} + readln(f2,temp); + diff:=boolean(temp); + readln(f2,temp); + compactlist:=boolean(temp); + readln(f2,temp); + {$IFDEF REG}invback:=boolean(temp);{$ELSE}invback:=false;{$ENDIF} + readln(f2,temp); + {$IFDEF REG}automatichrr:=boolean(temp);{$ELSE}automatichrr:=false;{$ENDIF} + readln(f2,temp); + beeppi:=boolean(temp); + readln(f2,temp); + nosamename:=boolean(temp); + readln(f2,temp); + goals:=boolean(temp); + readln(f2,temp); + diffwc:=boolean(temp); + readln(f2,temp); + kosystem:=boolean(temp); + + readln(f2,languagenumber); + readln(f2,trainrounds); + {$IFNDEF REG}trainrounds:=0;{$ENDIF} + + readln(f2,namenumber); + {$IFNDEF REG}namenumber:='0';{$ENDIF} + + setfile:='TEMP'; + readln(f2,str1); + if (fexist(str1+'.SJC')) then setfile:=upstr(str1); + + readln(f2,gdetail); + readln(f2,seecomps); + + readln(f2,temp); + readln(f2,temp); + readln(f2,temp); + + readln(f2,jmaara); + + for temp:=1 to jmaara do readln(f2,jnimet[NumTeams+1-temp]); + + if (jnimet[NumTeams]='') then jnimet[NumTeams]:='Team Finlando'; + + readln(f2,pmaara); + + if (pmaara>0) and (pmaara<11) then + for temp:=1 to pmaara do + begin + readln(f2,profileorder[temp]); +{ readln(f2,nimet[NumPl+1-temp]); + readln(f2,haalarit[temp]); } + end + else + pmaara:=1; + + {$IFNDEF REG}if (pmaara>2) then pmaara:=2;{$ENDIF} + + readln(f2,temp); + kothwind:=boolean(temp); + + readln(f2,kothrounds); + readln(f2,kothpack); + {$IFNDEF REG}if (kothpack<1) or (kothpack>6) then kothpack:=1;{$ENDIF} + readln(f2,kothmaki); + readln(f2,kothmaara); + + if (kothmaara>20) or (kothmaara<0) then kothmaara:=1; + + for temp:=1 to 20 do kothpel[temp]:=temp; { ettei siell„ ole nollia } + + for temp:=1 to kothmaara do + readln(f2,kothpel[temp]); + + DefaultKeys(K); + + for temp:=1 to 5 do + readln(f2,K[temp]); + + readln(f2,windplace); + +{ for temp:=1 to 6 do + readln(f2,str1); } + +(* readln(f2,temp); + BackGrSound:=boolean(temp); + readln(f2,temp); + SBSounds:=boolean(temp); + + readln(f2,SoundBankNumber); + + readln(f2,BaseIO); + readln(f2,IRQ); + readln(f2,DMA); *) + + close(f2); + +end; + + + +procedure setupmenu; +var xx,yy : integer; + index : array[0..4] of integer; +{ ch,ch2 : char; } + str1, str2 : string; + ystr, nstr : string[10]; + f3 : text; + ok, out : boolean; + temp : integer; + screen, entries, length : byte; +begin + + for temp:=0 to 4 do index[temp]:=1; + screen:=0; + + ystr:='YES'; + nstr:='NO'; + + Out:=False; + + repeat + + newscreen(1,0); + + fontcolor(240); + + case screen of + 0 : begin + str1:=lstr(175); + entries:=6; + length:=221; + end; + 1 : begin + str1:=lstr(176); + entries:=4; + length:=221; + end; + 2 : begin + str1:=lstr(177); + entries:=11; + length:=221; + end; + 3 : begin + str1:=lstr(178); + entries:=5; + length:=221; + end; + end; + + writefont(30,6,str1); + + for temp:=0 to entries do + begin + + str1:=''; + + case screen of + 1 : case temp of + 1 : if (languagenumber<255) then str1:=lnames[languagenumber] + else str1:='Undecided'; + +{ 2 : if (coachstyle>0) then str1:=lstr(361+coachstyle*40) + else str1:=lstr(9); } + 2 : if (beeppi) then str1:=lstr(6) else str1:=lstr(7); + 3 : str1:=lstr(13+gdetail); + 4 : begin + str1:=namenumber; + assign(f3,'NAMES'+namenumber+'.SKI'); + {$I-} + reset(f3); + {$I+} + if (IOResult=0) then + begin + readln(f3,str2); + close(f3); + fontcolor(241); + writefont(40,78,str2); + end; + end; + +{ 6 : str1:=teamnumber; } + end; + + 2 : case temp of + 1 : if (trainrounds=0) then str1:=lstr(9) + else str1:=lstr(trainrounds); + 2 : if (lct) then str1:=lstr(180) else str1:=lstr(185); + 3 : if (diff) then str1:=lstr(181) else str1:=lstr(186); + 4 : if (diffwc) then str1:=lstr(181) else str1:=lstr(186); + 5 : if (compactlist) then str1:=lstr(182) else str1:=lstr(187); + 6 : if (InvBack) then str1:=lstr(183) else str1:=lstr(188); +{ 6 : if (preview1) then str1:=lstr(181) else str1:=lstr(185); } + 7 : if (automatichrr) then str1:=lstr(182) else str1:=lstr(185); + + 8 : if (goals) then str1:=lstr(180) else str1:=lstr(186); + 9 : if (seecomps>NumPl) then str1:=lstr(seecomps) else str1:='#'+txt(seecomps); + +{ 8 : str1:=txt(windplace); } + 11 : if (kosystem) then str1:=lstr(182) else str1:=lstr(185); + end; + + 3 : case temp of + 1 : if (comphrs) then str1:=lstr(183) else str1:=lstr(187); + 2 : if (nosamename) then str1:=lstr(185) else str1:=lstr(180); + end; + end; { screen case } + + SetupItem(temp,screen,entries,str1); + + end; + +{$IFNDEF REG} + if (screen<3) then + begin + fontcolor(241); + writefont(10,185,lstr(208)+' '+lstr(209)); + fontcolor(240); + end; +{$ENDIF} + + DrawScreen; + + index[screen]:=MakeMenu(35,40,length,10,entries,index[screen],243,0,0); + + case screen of + 0 : begin + + case index[screen] of + 1,2,3 : screen:=index[screen]; + 4 : configurekeys(K); +{$IFDEF REG} + 5 : setgoals; + 6 : begin + WriteExtras; + HillMaker(0); + ReadExtras; + end; +{$ENDIF} + 0 : Out:=true; + end; + +{ index[screen]:=1; } + + end; + 1 : case index[screen] of + 1 : begin + WelcomeScreen(languagenumber); + end; + 2 : beeppi:=not beeppi; + 3 : begin + inc(gdetail); + if (gdetail>1) then gdetail:=0; + end; +{$IFDEF REG} + 4 : begin + repeat + ok:=false; + getch(255,70,245,ch,ch2); + + if (ch<>#27) then + begin + assign(f3,'names'+ch+'.ski'); + {$I-} + reset(f3); + {$I+} + if (IOResult=0) then + begin + ok:=true; + close(f3); + end; + end else ok:=true; + + until (ok); + + if (ch<>#27) then + begin + namenumber:=ch; + loadnames(namenumber,jmaara,TeamLineup,true); + end; + + end; +{$ENDIF} + + 0 : screen:=0; + + end; + 2 : case index[screen] of +{$IFDEF REG} + 1 : begin + inc(trainrounds); + if (trainrounds>3) then trainrounds:=0; + end; + 2 : lct:=not lct; +{$ENDIF} + 3 : diff:=not diff; + 4 : diffwc:=not diffwc; + 5 : compactlist:=not compactlist; +{$IFDEF REG} + 6 : invback:=not invback; + 7 : automatichrr:=not automatichrr; + 8 : goals:=not goals; +{$ENDIF} + 9 : chooseseecomps(seecomps); +{$IFDEF REG} + 10 : choosewindplace(windplace); +{$ENDIF} + 11 : kosystem:=not kosystem; + + 0 : screen:=0; + + end; + 3 : case index[screen] of + 1 : comphrs:=not comphrs; + 2 : nosamename:=not nosamename; + 3,4 : begin + fillbox(69,79,251,131,242); + fillbox(70,80,250,130,244); + fillarea(70,80,250,130,63); + str1:=lstr(190); + + if (index[screen]=4) then str1:=lstr(191); + writefont(80,90,str1+' '+lstr(192)); + writefont(80,110,lstr(193)); + + getch(88+fontlen(lstr(193)),110,243,ch,ch2); + + if (upcase(ch) = lch(6,1)) then ResetHiscore(4-index[screen]); + end; + 5 : begin + ResetConfig; + end; + 0 : screen:=0; + end; +(* + A : begin + clrwhole(0); + SoundSetup(BaseIO,IRQ,DMA,SoundBankNumber,SBSounds,BackGrSound,reg); + end; +*) + + end; { screen case } + + until (Out); + +{ readkey; } + + WriteConfig; { pistet„„n muutokset levylle } + +end; + + + + +procedure ResetStats; +var aaa,bbb,ccc : byte; +begin + for aaa:=0 to 15 do + for bbb:=0 to NumWcHills do + begin + Stats[aaa,bbb].CompPos:=0; + Stats[aaa,bbb].WCPos:=0; + Stats[aaa,bbb].CompPts:=0; + + for ccc:=1 to 2 do + begin + Stats[aaa,bbb].RoundPts[ccc]:=0; + Stats[aaa,bbb].RoundLen[ccc]:=0; + Stats[aaa,bbb].Reason[ccc]:=0; + end; + + end; +end; + + +procedure hyppy(index,pel,team:integer); +var { SoundOn : array[0..5] of boolean; } + + tempb : byte; + temp,temp2 : integer; + +{ ch,ch2 : char; } { for #0 } + + statsvictim : integer; + + JumperAnim, SkiAnim, ponnphase : byte; + + kr : integer; + ponnistus : integer; + qx : single; + +{ KeulaX : integer; } + + paras,parasp : integer; + + kor,matka,px,pxk,py,t,pl,kkor {,makikulma} : single; + + umatka, ukor, upx : single; + ux, uy : integer; + + kulma1, kulmas, hp, x, y, height : integer; + + deltah : array[0..5] of integer; + + sx, sy, fx, fy, keulaY : integer; + + wrx, wry, goalx, goaly {, tuulisafe} : integer; + + DeltaX, DeltaY : integer; { vaikkakin maki.x ja y ovat longintej„ } + + ok, out, hillrecord : boolean; + kupat, clanding, landing, grade : byte; + + riski, laskuri : longint; + tyylip : array[1..7] of integer; + LMaara : word; +{ LStyle : byte; } + + score : integer; + + kulmalaskuri : integer; + + startanim, ssuunta : integer; + + namestr, str1, str2 : string; + replayfilename, replayname : string; + + cjumper, draw, mcliivi : boolean; + reflex, skill, maxspeed : byte; + + RTurns : integer; + RstartX, RstartY : integer; + RFlstart, RFlstop : integer; + RD : array[0..4,0..1000] of byte; + + f1 : text; + + top5 : array[0..6] of byte; + + ActProfile : byte; { aktiivine profiili } + +function MakiKulma(x:integer):integer; +var value:integer; +begin + + value:=Profiili(x+9)+Profiili(x+8)+Profiili(x+7)+Profiili(x+6); + value:=value-Profiili(x-3)-Profiili(x-4)-Profiili(x-5)-Profiili(x-2); + + if ((x>KeulaX-15) and (x<=KeulaX)) { or (x>1015) } then value:=0; + + MakiKulma:=value; + +end; + +procedure drawkothinfo(pel:integer); +{var apu1, apu2, apu3 : integer; } +var str1 : string; +begin + + str1:=lstr(67)+' '+txt(1+kothmaara+pmaara-mcpisteet[0]); + str1:=str1+' '+lstr(8)+' '+txt(kothmaara+pmaara); + + ewritefont(308,9,str1); + + if (top5[1]>0) then + begin + str1:=lstr(68); + + if (kierros=1) and (kothrounds>1) then str1:=lstr(69); + + ewritefont(308,19,str1); + + str1:=txtp(pisteet[top5[1]]); + + if (kierros=2) then str1:=txtp(pisteet[top5[1]]-pisteet[pel]); + + ewritefont(308,29,nimet[top5[1]]+'$'+str1); + end; +end; + + + + +procedure drawkeymap; +var temp : integer; +begin + +{ fontcolor(240); } + + DrawAnim(227,2,64); + + fontcolor(246); + ewritefont(308,9,lstr(330)); + + for temp:=1 to 5 do + begin + ewritefont(308,temp*10+9,lstr(330+temp)+': '+keyname(K[temp])); + end; + fontcolor(247); + +end; + + +procedure drawtop5info(index, pel:integer); +var str1 : string; + temp : integer; + +begin + + ewritefont(308,9,acthill.name+' K'+txt(acthill.kr)); + + for temp:=1 to 5 do + begin + if (pisteet[top5[temp]]>0) then + begin + + str1:=txtp(pisteet[top5[temp]]); + + if (diff) and (temp>1) then str1:=txtp(pisteet[top5[temp]]-pisteet[top5[1]]); + + if (jcup) then str1:=jnimet[top5[temp]]+'$'+str1 + else str1:=nimet[top5[temp]]+'$'+str1; + + ewritefont(308,13+temp*7,str1); + + end; + end; + + str1:=lstr(62); + if (kierros=2) and (index=1) and (wcup) then str1:=lstr(63); + + temp:=pisteet[top5[1]]-pisteet[pel]; + + if (temp>0) then ewritefont(308,62,str1+': '+txtp(temp+1)); + +end; + + + + +procedure drawwcinfo; +var str1 : string; + temp : integer; + +begin + + if (jcup) then ewritefont(308,9,lstr(71)) + else ewritefont(308,9,lstr(70)); + + for temp:=1 to 5 do + begin + if (mcpisteet[mcluett[temp]]>0) then + begin + + str1:=txt(mcpisteet[mcluett[temp]]); + + if (diffwc) and (temp>1) then str1:=txt(mcpisteet[mcluett[temp]]-mcpisteet[mcluett[1]]); + + if (jcup) then str1:=jnimet[mcluett[temp]]+'$'+str1 + else str1:=nimet[mcluett[temp]]+'$'+str1; + + ewritefont(308,13+temp*7,str1); + end; + end; + +end; + +procedure drawhrinfo; +begin + ewritefont(308,9,acthill.name+' K'+txt(acthill.kr)); + ewritefont(308,19,lstr(65)); + ewritefont(308,29,HRName(nytmaki)); + ewritefont(308,39,txtp(HRLen(nytmaki))+'Ģ'); + if (goals) and (nytmaki<=NumWcHills) then ewritefont(308,49,lstr(242)+': '+txtp(loadgoal(nytmaki))); + +end; + + +procedure drawinfo(var l:longint;index,pel:integer); +begin + + if (pisteet[top5[1]]=0) or (kierros<0) then + begin { ei tuloksia n„ytett„v„n„ } + if ((wcup) or (jcup)) and (mcpisteet[mcluett[1]]>0) then + begin + case l of + 0..130 : drawhrinfo; + 146..276 : drawwcinfo; + 291 : l:=0; + end; + end else drawhrinfo; + end else + begin { on tuloksia } + if (koth) then + begin + case l of + 0..130 : drawkothinfo(pel); + 146..276 : drawhrinfo; + 291 : l:=0; + end; + end + else + case l of + 0..130 : drawtop5info(index,pel); + 146..276 : drawhrinfo; + 292..422 : if (mcpisteet[mcluett[1]]>0) then drawwcinfo else l:=0; + 437 : l:=0; + end; + end; +end; + + +procedure jarjesta5(index:integer); +var num : byte; + apu1, apu2, apu3 : integer; +begin + + for apu1:=1 to 5 do top5[apu1]:=0; + + if (koth) then { haetaan huonoin } + begin + + apu2:=30000; apu3:=0; { hae huonoin t„h„n menness„ } + + for apu1:=1 to index-1 do + if (mcpisteet[mcluett[apu1]]=0) then { jos pelaaja mukana ja ei itse? KOTH } + if (pisteet[mcluett[apu1]] < apu2) then + begin + apu2:=pisteet[mcluett[apu1]]; + apu3:=mcluett[apu1]; + end; + + if (apu2<>30000) then + begin + top5[1]:=apu3; + end; + + end else + + begin + + if (jcup) then num:=NumTeams else num:=NumPl; + + for apu1:=1 to num do + begin + apu2:=1; + repeat { Verrataan jokaiseen } + if (pisteet[apu1]>pisteet[top5[apu2]]) then + begin + for apu3:=5 downto apu2+1 do + top5[apu3]:=top5[apu3-1]; + + top5[apu2]:=apu1; + + apu2:=num; + end; + inc(apu2); + + until (apu2>=6); + end; + end; +end; + + +function writereplay(author,name:string):byte; +var t1, t2 : integer; + check : longint; + result: byte; + +begin + + {$I-} + Assign(f1,replayfilename+'.SJR'); + Rewrite(f1); + {$I+} + Result:=0; + + if (IOResult=0) then + begin + check:=0; + writeln(f1,RStartX); writeln(f1,RStartY); inc(check,RStartx*2+RStarty); + writeln(f1,RTurns); inc(check,Rturns*3); + writeln(f1,nytmaki); if (nytmaki<=numwchills) then inc(check,nytmaki*131); + str1:='HILLBASE'; + if (nytmaki>NumWCHills) then str1:=hillfile(nytmaki-NumWCHills); + writeln(f1,str1); inc(check,valuestr(str1,3)*3); + writeln(f1,Acthill.profile); inc(check,Acthill.profile); + writeln(f1,lmaara); + writeln(f1,hp); inc(check,(hp+2)*69); + writeln(f1,RFLStart); + writeln(f1,RFLStop); inc(check,rflstart+rflstop); + writeln(f1,WRx); writeln(f1,WRy); inc(check,(WRx+WRy)*2); + writeln(f1,Profile[actprofile].suitcolor); + writeln(f1,Profile[actprofile].skicolor); + + writeln(f1,author); inc(check,valuestr(author,2)); + writeln(f1,name); + writeln(f1,dayandtime(Today,Now)); + writeln(f1,integer(mcliivi)); + t1:=0; { kisailmaisu tai 100-startgate } + if (treeni) then t1:=100-startgate; + if (wcup) then t1:=cupstyle+1; + if (jcup) then t1:=4; + if (koth) then t1:=5; + writeln(f1,t1); inc(check,t1*1412); + + writeln(f1,check xor 3675433); + writeln(f1,'0'); + + writeln(f1); + writeln(f1,'--- Replay Data --- '); + + write(f1,'*'); + + for t1:=0 to 1000 do + for t2:=0 to 4 do + write(f1,char(RD[t2,t1])); + + Close(f1); + + end else result:=1; + + writereplay:=result; + +end; + + + + +begin + + kr:=acthill.kr; + + ch:=#0; + + RTurns:=0; + + if (eka) then + begin + + LMaara:=Random(2)*Random(256); + if (Lmaara>0) and (Lmaara<40) then Lmaara:=41+random(150); + if (Lmaara>0) and (random(4)=0) then inc(Lmaara,1000); { r„nt„ } +{ Lmaara:=1151; } + + VieLmaara(Lmaara); + +{ LStyle:=Random(2)*Random(2); + LStyle:=1; } + + if (gdetail=1) then LMaara:=0; + + if (LoadHill(KeulaX, nytmaki, Acthill)<>0) then + begin + ch:=#27; + cupslut:=true; + end; + + Maki.X:=0; + Maki.Y:=0; + DrawHillScreen; + + Tuuli.Hae; + + end; + + SiirraStandardiPaletti; + + if (LMaara>1000) then TummaLumi; + + if (eka) then AsetaPaletti; + + cjumper:=true; + draw:=false; + + if (pel > NumPl-pmaara) then { oma j„tk„ } + begin + cjumper:=false; + draw:=true; + end; + + temp:=0; + + if (seecomps>NumPl) then { jos ei suoraa pelaajavalintaa } + begin + case (seecomps) of { ketk„ n„ytet„„n } + 235 : temp:=1; + 236 : temp:=3; + 237 : temp:=5; + 238 : temp:=10; + 239 : temp:=100; + end; + + temp2:=index; + if (koth) or (jcup) then temp2:=team; { koth: t„nne johdetaan se realindex } + if (temp2 <= temp) then draw:=true; + end + else + begin { suora pelaaja } + if (seecomps=pel) then draw:=true; + end; + + statsvictim:=0; actprofile:=0; + + LoadSuit(pel mod NumSuits,0); + LoadSkis(pel mod NumSkis,0); + + if (not cjumper) then + begin + statsvictim:=NumPl+1-pel; { antaa pelaajan numeron 1..10 } + actprofile:=profileorder[statsvictim]; + LoadSuit(Profile[actprofile].suitcolor,0); + LoadSkis(Profile[actprofile].skicolor,0); + end; + + mcliivi:=true; + if (mcluett[1]<>pel) or (treeni) or (koth) then mcliivi:=false; + + if (not mcliivi) then SiirraLiiviPois; + +{ AsetaPaletti; } + + +(* + if (koth) then draw:=true; { KYSEENALAINEN! } +*) + +{ draw:=true; + cjumper:=true; } + + +(* + if (not cjumper) and (jcup) then statsvictim:=index+((pel-1)*4); { toivottavasti tekee saman } +*) + { NumPl+1-pel+4*(team-1) } + temp:=random(80); { 120 } + dec(temp,random(24*pel)); { 34,32, 30, 25,20, 13 ennen muutosta } + dec(temp,random(12*pel)); { 17,16,15, 12, 8, 5 e.m. } + dec(temp,random(10*pel)); { uusi } + temp:=63-temp; { 80,100,110,114,119,119 e.m. } + + skill:=17-round(nsqrt(temp)/4); + + if (skill>16) then skill:=16; + + reflex:=round((34+pel+random(10))/5); +{ reflex:=round((33+pel+random(8))/4); } +{ reflex:=round((45+pel+random(10))/5); } +{ reflex:=round((30+1+random(30))/5); } + + { floppihyppy } + if (random(300-pel)=0) then skill:=17+random(3+pel div 25); + +{ skill:=16; } + + GetNow(Now); { haetaan current time } + + Maki.X:=0; + Maki.Y:=0; + + x:=0; y:=0; sx:=0; sy:=0; fx:=0; fy:=0; { Former X & Y } + hp:=0; + paras:=0; parasp:=0; { treenijuttuja } + + KeulaY:=Profiili(KeulaX); { helpottaa vaan } + + pl:=acthill.plsave; { plsave on m„enparametreja } + maxspeed:=acthill.vxfinal; { n„in voidaan lavaa vaihtaa... } + +{ pl:=0.34; temps } + +{ vxfinal:=150; lopullinen nopeus pit„is olla GLOBAL tai jotain } + + tyylip[1]:=195; { ennen 200, v3.0 195 } + tyylip[6]:=200; + tyylip[7]:=0; { tyylip[6] => pienin, [7] => suurin } + + qx:=KeulaX+0.5; { emme halua, ett„ se toteaa keulalla matkan>0 } + + wrx:=0; wry:=0; goalx:=0; goaly:=0; + matka:=0; + + { haetaan m„kienkkakepille mesta! } + + temp:=0; + if (nytmaki<=NumWcHills) then temp:=loadgoal(nytmaki); + + if (draw) then + repeat + matka:=matka+1; + + x:=round(matka+qx); + kor:=Profiili(x); + kkor:=kor-KeulaY; + hp:=round(nsqrt((matka*matka)+(kkor*kkor))*acthill.pk*0.5)*5; + + if (hp>=HRLen(nytmaki)) and (HRLen(nytmaki)>0) and (wrx=0) then + begin wrx:=x; wry:=round(kor)-9; end; + + if (hp>=temp) and (temp<>0) and (goalx=0) then + begin goalx:=x; goaly:=round(kor)-7; end; + + until (x>1024); + + + hp:=0; + kkor:=0; + + matka:=-KeulaX+10; + qx:=KeulaX+0.5; { emme halua, ett„ se toteaa keulalla matkan>0 } + + x:=round(matka+qx); + + kor:=Profiili(x); { alasp„in on positiivinen } + + y:=round(kor); + +(* + qy:=-Profiili(KeulaX); { x & y kompensaatteja n„ytt”„ varten } + *) + + ponnistus:=0; Out:=False; Ok:=True; { OK to be used w/ ei ponnistanut } + height:=0; { „ij„n korkeus m„est„ } +(* fheight:=0; { edellinen korkeus } *) + for temp:=0 to 5 do DeltaH[temp]:=0; + riski:=0; { kaatumisriski } + + landing:=0; { 0 - ei, 1 - telemark, 2 - tasajalka } + clanding:=0; { tuleva lask. 0 - ei, 1 - tele, 2 - tasa } + kupat:=0; { 0 - ei, 1 - oma moka, 2 - huono s„k„ } + + ponnphase:=0; { t„m„ m„„r„„ animaation asennon ukossa } + + + py:=0; { vauhtia Y-akselin ei oo, tai on mutta summa=0 } + + px:=0; { T„t„ kerrotaan pxk:lla, kunnes px = vxfinal; } + pxk:=1.016; { hyv„ kerroin } + + t:=0; { aika } + + kulma1:=0; { Žij„n kropan kulma } + { kulmas:=900; } { Suksien kulma } + kulmas:=0; { Suksien kulma } + + ssuunta:=0; { sukset eiv„t liiku mihink„„n } + + replayname:='?'; replayfilename:='TEMP'; + +{ temp:=1; temp2:=0; } + + + +{ Port[$3c8]:=15; Port[$3c9]:=63; Port[$3c9]:=33; port[$3c9]:=33; } + +{ x:=round(matka)+qx; + y:=Profiili(x); } + + +{ fillbox(0,9,319,16,10); + + for a:=0 to 11 do + drawanim(10+a*20,20,a+87); + + writefont(1,10,1,'Ville Juhana K”n”nen 118.3 (165.5Ģ)'); } + +{ writefont(1,10,1,'ABCDEFGHIJKLMNOPQRSTUVXYZŽ™1234567890Ģ"().:,''#*-+?!'); } + +{ fillbox(100,100,200,183,240); oikea neliskantti 320x200:ssa } + + Maki.Tulosta; + +(* FontColor(251); { p„„fonttiv„ri } *) + + namestr:=nimet[pel]; + +(* + if (jcup) then namestr:=nimet[NumPl+1-statsvictim] + else if (treeni) then namestr:=nimet[NumPl+1]; +*) + + str1:=namestr; + + if (wcup) then + begin + if (kierros=2) then str1:=str1+' ('+txt(index)+'.)'; + if (kierros=0) and (qual[pel]>0) then str1:=str1+' Q WC'; + end; + +{ writefont(32,4,15,'NEXT '+nimet[51-pel]); } + + str2:=lstr(51); + + case kierros of + -5..-1 : str2:=lstr(52)+' '+txt(abs(kierros)); + 0..2 : str2:=lstr(53+kierros); + end; + + if (kierros=2) and (wcup) and (draw) then fontcolor(241); + +{ + writefont(200,10,'VXF '+txt(acthill.vxfinal)); + writefont(200,20,'PL '+txt(round(pl*100))); + writefont(200,30,'PK '+txt(round(acthill.pk*100))); +} + jarjesta5(index); + +{ drawtop5info(index, pel); } + +{ DrawScreen; } + +{ cupslut:=waitforkey3(180,ch); } + + DeltaX:=Maki.X; + DeltaY:=Maki.Y; + + laskuri:=0; { t„t„ k„ytet„„n laskurina seuraavassa } + +{ testspeed; } + + AsetaPaletti; + +{ Tuulisafe:=Tuuli.value; } + + Tuuli.Hae; + + if (draw) and (ch<>#27) then + repeat { INFORUUTU LUUPPI! } + + inc(laskuri); + + Maki.Tulosta; + +{ Tuuli.Hae; } + + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,Tuuli.Value,LMaara,true); + +{ writefont(5,100,txtp(fourpts[pel])); } + +{ writefont(100,100,txt(wrx)); + writefont(100,110,txt(wry)); + drawanim(100,90,68); + drawanim(100,192,68); } + + DrawAnim(227,2,64); + DrawAnim(3,150,65); + + FontColor(247); + + Writefont(12,160,str2); + Writefont(12,172,lstr(56)); + + if (treeni) then writefont(67+fontlen(lstr(58)),27,'(+/-)'); + + if (jcup) then WriteFont(14+fontlen(lstr(56)),179,jnimet[team]); + + if (not cjumper) then FontColor(240); +{ else FontColor(240); } + + WriteFont(12+fontlen(lstr(56)),172,str1); { nimi ruutuun } + + + if (treeni) then writefont(64,19,lstr(58)); + + Fontcolor(241); + + if (kierros=2) and (wcup) then + Writefont(14+fontlen(lstr(56)),179,txtp(pisteet[pel])+' ('+txtp(Cstats[1,pel])+'Ģ)'); + Writefont(12,191,lstr(59)); + + + FontColor(246); + + if (treeni) then writefont(70+fontlen(lstr(58)),19,txt(startgate)); + {252} + temp:=pel; + if (jcup) then temp:=team; + DrawInfo(laskuri, index, temp); + +{ if (ex) then balk(0); } + + WaitRaster; + +{ if (ex) then balk(1); } + + Maki.PaivitaRuutu; + + ch:=#1; + + if (keypressed) then + begin + readkbd(ch,ch2); + if (ch=#0) and (ch2=#68) then begin cupslut:=true; ch:=#27; end; + if (upcase(ch)=lch(60,1)) then + begin + SetupMenu; + ch:=#1; + LoadSuit(Profile[actprofile].suitcolor,0); + LoadSkis(Profile[actprofile].skicolor,0); + mcliivi:=true; + if (mcluett[1]<>pel) or (treeni) or (koth) then mcliivi:=false; + if (not mcliivi) then SiirraLiiviPois; + Tuuli.AsetaPaikka(windplace); + end; + + if (treeni) then + begin + if (ch='+') then begin inc(startgate); ch:=#1; end; + if (ch='-') then begin dec(startgate); ch:=#1; end; + if (startgate<1) then startgate:=1; + if (startgate>30) then startgate:=30; + end; + end; + + until (ch<>#1); + + if (treeni) then maxspeed:=maxspeed+(startgate-15); + +(* + if (keypressed) then + begin + ch:=readkey; + if (ch=#0) then if (readkey=#68) then begin cupslut:=true; ch:=#27; end; + end; +*) + + laskuri:=0; { t„t„ ehk„ k„ytet„„n laskurina seuraavassa } + Out:=false; + + if (draw) then + begin + MuutaLogo(6); + AsetaPaletti; + end; + + SkiAnim:=SuksiLaskussa(MakiKulma(x)); + JumperAnim:=164; + + KulmaLaskuri:=0; { k„ytet„„n t„t„ parruanimia } + px:=0; + + if (draw) then FontColor(247); + + RstartX:=x; + RstartY:=y; + + if (ch<>#27) and (draw) then { ISTUU PARRULLA LUUPPI } + repeat + + if (not treeni) then inc(laskuri); + + Tuuli.Hae; + + Maki.Tulosta; + +{ PutPixel(KeulaX-Maki.X,Profiili(KeulaX)-Maki.Y,15); } + +{ tempb:=SuksiAnim(x); } + + if (kulmalaskuri>3024) and (kulmalaskuri<4000) then + begin + temp:=kulmalaskuri-3024; + sx:=x-Maki.X+4; + sy:=y-Maki.Y-10; + + if (temp=1) then px:=0.6; + px:=px+((tuuli.value-20)/10000); + + inc(sx,round(temp*px)); + inc(sy,(temp*temp) div 160); + + if (sy< profiili(sx)) then putpixel(sx,sy,225) + else kulmalaskuri:=0; + + end; + + if (laskuri<350) or (laskuri mod 40 > 19) then + DrawAnim(x-Maki.X+60,y-Maki.Y-10,67); { liikennevalo1 } + + DrawAnim(x-Maki.X,y-Maki.Y-2,JumperAnim); + DrawAnim(x-Maki.X,y-Maki.Y-1,SkiAnim); + + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,Tuuli.Value,LMaara,true); + +{ Lumi.Update(Video,128,(DeltaX-Maki.X)*2,(DeltaY-Maki.Y)*2); } + +{ Writefont(x-Maki.X,y-Maki.Y-20,1,txt(height)); } +{ Writefont(x-Maki.X,y-Maki.Y-15,txt(haalarit[statsvictim])); + Writefont(x-Maki.X+15,y-Maki.Y-15,txt(statsvictim)); } +{ Writefont(x-Maki.X+15,y-Maki.Y-15,txt(index)); } + +{ if (cjumper) then ewritefont(308,9,'(C)'); } + if (cjumper) then writefont(x-Maki.X,y-Maki.Y-20,'C'); + +{ if (cjumper) and (laskuri mod 40 < 20) then + ewritefont(308,9,'(COMPUTER)'); } + + if (windplace>10) then Tuuli.Tuo(x-Maki.X,y-Maki.Y); + + if (laskuri<700) then Tuuli.Piirra; + + if (eka) and (osakilpailu=1) and (not cjumper) then drawkeymap; + +{ if (ex) then balk(0); } + + WaitRaster; + { inc(Rturns); } + +{ if (ex) then balk(1); } + + Maki.PaivitaRuutu; + + ch:=#0; ch2:=#0; + + if (keypressed) then + begin + readkbd(ch,ch2); + ch:=upcase(ch); + if (ch=#0) and (ch2=#68) then begin cupslut:=true; ch:=#27; end; + if (not cjumper) and ((kword(ch,ch2)=K[2]) or (ch=#13)) then out:=true; { liikkeelle } + if (ch=#0) and (ch2=#63) and (wcup) and (cupstyle=1) and + (index=NumPl) and (kierros=1) and (osakilpailu=1) then begin Tuuli.Alusta(windplace); end; + if (ch=#27) then out:=true; + end; + if (cjumper) and ((random(100)=0) or (laskuri>600)) then Out:=True; + if (cjumper) and (random(100)=0) and (kulmalaskuri=0) then + begin + kulmalaskuri:=(random(3)+1)*1000; + sx:=0; sy:=0; + end; + + if (kulmalaskuri>0) then inc(kulmalaskuri); + + if (kulmalaskuri=0) and (not cjumper) then + begin + if (kword(ch,ch2)=K[3]) then kulmalaskuri:=3000; + if (kword(ch,ch2)=K[4]) then kulmalaskuri:=2000; + if (kword(ch,ch2)=K[1]) then kulmalaskuri:=1000; + + sx:=0; + sy:=0; + + end; + + JumperAnim:=ParruAnim(kulmalaskuri); + + if (ch=#27) and (cjumper) then JumperAnim:=164; { emm„ haluu tsiigaa } + + until ((Out) and (JumperAnim=164)) or (laskuri>700); + + sx:=0; + sy:=0; + + if (laskuri>700) then { ei sitten kaveri l„htenytk„„n } + begin + if (beeppi) then beep(2); + muutalogo(4); { vihre„ pois } + asetapaletti; + DrawAnim(x-Maki.X+60,y-Maki.Y-10,67); { liikennevalo } + + DrawAnim(3,150,65); + + fontcolor(240); + writefont(12,160,namestr+' '+lstr(79)); + + drawscreen; + + waitforkey; + ch:=#27; + end; + + Out:=False; + +{ temp:=67; } + + laskuri:=0; + px:=0; + + if (ch=#27) and (draw) and (cjumper) then { emm„ haluukkaan tsiigata } + begin + draw:=false; + ch:=#0; + end; + +{ pl:=0.10; } + + if (cjumper) and (not draw) then { nopeutetaan v„h„n :) } + begin + px:=acthill.vxfinal; + matka:=-45; + for temp:=1 to 100 do Tuuli.Siirra; { veivataan my”s tuulta v„h„n } + end; + + kulmalaskuri:=200; +{ reflexlaskuri:=0; } +{ + writefont(100,100,'ch: '+txt(byte(ch))); + writefont(100,110,'m: '+txt(round(matka))); + drawscreen; + readkey; +} + + if (ch<>#27) then { hyppy - main } + repeat + + Tuuli.Hae; + +{ tuuli:=-10; } + + matka:=matka+(px*0.01); + + fx:=x; { former x & y } + fy:=y; + + x:=round(matka+qx); + + if (Ch<>#27) then Ch:=#0; { en tied„ muisteleeko se vanhoja } + ch2:=#0; + + if (Keypressed) then + begin + readkbd(ch,ch2); + ch:=upcase(ch); + +{ if (cjumper) then ch:=#1; } + + if (ch=#0) and (ch2=#68) then + begin + cupslut:=true; + ch:=#27; + Out:=True; + end; + + if (ch=#27) then + begin + + if (cjumper) then + begin + Draw:=False; + if (px<37) then px:=37; + end + else Out:=True; + + end; + + if (cjumper) then begin ch:=#0; ch2:=#0; end; + + if (ch='P') then readkbd(ch,ch2); + + end; + + +{ if (ch='q') then kulma1:=49; + if (ch='w') then kulma1:=51; } + +{ if (matka=0) then beep(5); } + + if (matka>=0) then { matka => 0 eli kun matka=0 ollaan jo lennossa } + begin + + inc(laskuri); + + if (kulma1 107) and (landing=0) then inc(reflexlaskuri); } + + if (cjumper) then + begin + { automatic jumper angle differentiating } + if (LentoAnim(kulma1) > 107) and (laskuri mod reflex = 0) then begin ch:=chr(hi(K[2])); ch2:=chr(lo(K[2])); end; + if (LentoAnim(kulma1) < 107) and (laskuri mod reflex = 0) then begin ch:=chr(hi(K[3])); ch2:=chr(lo(K[3])); end; + + temp:=FindLanding(Makikulma(x)); + + if (clanding=2) then temp:=round(temp*0.6); { ex (temp-temp div 4) } + +{ WriteFont(280,50,'T'+txt(temp)); + WriteFont(280,60,'H'+txt(Height)); + WriteFont(280,70,'D'+txt(DeltaH[0] + DeltaH[1] + DeltaH[2])); } + +{ WriteFont(280,70,'L'+txtp(hp)); + WriteFont(280,80,'T-H'+txt(temp-height)); + Writefont(250,90,'C'+txt(clanding)+' L'+txt(landing)); } + +{ DrawScreen; + ch:=readkey; } + + { kumpualastulovarmistus! } + if (landing=0) and (matka>3) and (height<4) then begin { beep(2); } landing:=2; end; + + if (Landing=0) and (DeltaH[0] + DeltaH[1] + DeltaH[2] > 1) and (Height < temp) then + begin + + if (clanding=2) then landing:=2; + + if (clanding=0) then { eka kertaa } + if (random(250) < temp*(temp div 10)) then clanding:=2 + else landing:=1; + end; + + end; { if (cjumper) } + +{ if (upcase(ch)='T') then Landing:=1; + if (upcase(ch)='R') then Landing:=2; } + if (kword(ch,ch2)=K[4]) then Landing:=1; + if (kword(ch,ch2)=K[5]) then Landing:=2; + + if (kword(ch,ch2)=K[3]) and (kulma1<=600) then kulma1:=kulma1+round(kulma1/4); + if (kword(ch,ch2)=K[2]) and (Landing=0) and (kulma1>0) then kulma1:=kulma1-round(kulma1/5); + +{ if (ch='x') then pl:=0.1; } + + { ylirotaatio } + if (kulma1<50) then begin pl:=pl+0.0001-((kulma1-50)/18000); {beep(1);} end; + + +{ orig. if (tuuli>0) then pl:=pl-((1-(kulma1/900))/1500)+(sqrt(sqrt(2*tuuli)))/52400 + else pl:=pl-((1-(kulma1/900))/1500)-(sqrt(sqrt(-2*tuuli)))/52400; } + + if (tuuli.value>0) then pl:=pl-((1-(kulma1/900))/1875)+(sqrt(sqrt(2*tuuli.value)))/65500 + else pl:=pl-((1-(kulma1/900))/1875)-(sqrt(sqrt(-2*tuuli.value)))/65500; + +{ px:=px-((kulma1/900)/19)+((sqrt(4*tuuli.value+245)-16)/360); } { "alkup." } +{ px:=px-((kulma1/900)/24)+((sqrt(4*tuuli.value+245)-16)/455); } + px:=px-((kulma1/900)/20)+((nsqrt(4*tuuli.value+245)-16)/400); + + t:=t+0.01; + + { Satunnaispuuska } + if (random(30000)0) then + begin { puuska tuo sukset yl”s } + ssuunta:=3; + pl:=pl-random(tuuli.voim+50)/15000; + end; + + if (temp<0) then + begin { puuska vie suksia alas } + ssuunta:=6; +{ pl:=pl-random(tvoim+20)/6000+(tvoim/12000); } { vanha } + pl:=pl+random(tuuli.voim+50)/15000; + end; + + end; + + if (pl<0.105) then pl:=0.105; { leijuntaesto :) } + + kor:=kor+(t*t*pl)-((py-8)/100); + +{ delay(600); } + + if (ssuunta>0) then { SUKSIEN HEILUNTA - ponnistusfibat ja puuskat } + begin + + case ssuunta of + + 2 : begin { ponn my”h„ss„, k menossa alas } + if (kulmas<0) then inc(kulmas,2); { 4, 3 } + if (kulmas>0) then kulmas:=0; + end; + + 1 : begin { ponn my”h„ss„, k tulossa yl”s } + + if (kulmas=0) then + begin { first strike } + kulmas:=-51-(16-ponnistus)*6; + if (kulmas<-105) then kulmas:=-105; + + end else dec(kulmas,4); + + if (kulmas < (ponnistus-16)*14) then ssuunta:=2; + + end; + + 3 : begin { puuska, k saa iskua (ja tulee alas) } + kulmas:=kulmas-random(50)-30; + ssuunta:=2; + end; + + + 5 : begin { ponn ajoissa, k tulossa yl”s } + if (kulmas>0) then dec(kulmas,1); + if (kulmas<0) then kulmas:=0; + end; + + 4 : begin { ponn ajoissa, k menee alas } + + if (kulmas=0) then + begin { first strike } + kulmas:=70+(ponnistus-16)*6; + if (kulmas>130) then kulmas:=130; { ei nyt ihan „lyt”n } + + end else inc(kulmas,3); + + if (kulmas > (ponnistus-16)*14) then ssuunta:=5; { riitt„„ } + + end; + + 6 : begin { puuska, k saa iskua (ja tulee yl”s) } + kulmas:=kulmas+random(50)+30; + ssuunta:=5; + end; + + end; { case } + + if (kulmas=0) then ssuunta:=0; + end; + + + if (Landing>0) then { alastulolis„ykset } + if (kulma1<600) then + begin + kulma1:=kulma1+9+(landing-1)*5; + + if (pl<1) then pl:=pl+0.003; + end; + + if (OK) then { alkukulma... RUN ONCE (OK) } + begin + kulma1:=158; OK:=False; + { kulma1:=52; } + + if (ponnistus<16) then ssuunta:=1; { ponn liian my”h„„n - k„rjet yl”s} + if (ponnistus>16) then ssuunta:=4; { ponn liian aikaisin - k„rjet alas } + if (ponnistus=0) then ssuunta:=0; { ei sitten ponnistanut ollenkaan } + end; + + JumperAnim:=LentoAnim(kulma1); + + if (Ponnphase<25) then JumperAnim:=PonnAnim(ponnphase); + + temp:=Height; { vanha korkeus } + Height:=Profiili(x)-round(kor); + + if (Height<0) then Height:=0; + + DeltaH[laskuri mod 3]:=temp-Height; + + if (Height<6) { and (kulmas>-10) } and (matka>20) then + begin { j„nnitt„v„ m„en ennakointi! } +(* ssuunta:=2; { suunta varmasti alas - lopettaa nollaan } *) + if (kulmas=0) then ssuunta:=0; { meik„ m„„r„„ varmasti asennon } + SkiAnim:=SuksiLaskussa(MakiKulma(x) div (Height+1)); + end + else SkiAnim:=SuksiLennossa(kulmas); + + if (Height=0) then Out:=true; { the eagle has landed } + + End + else + + begin { matka < 0 } + + inc(laskuri); + + { mies ponnistaa jo... } + If (Ponnistus>0) then inc(ponnistus); + + { start ponnistus! } + If (kword(ch,ch2)=K[1]) and (matka>-40) and (ponnistus=0) then + begin + inc(Ponnistus); + { SoundOn[1]:=StartSound(Sound[1],1,False);} + end; + + { Automaattiponnistus } + if (cjumper) and (matka>-(skill*px*0.01)) and (ponnistus=0) then inc(ponnistus); + + SkiAnim:=SuksiLaskussa(MakiKulma(x)); + + JumperAnim:=LaskuAsento(SkiAnim); + + if (draw) and (laskuri<28) then + begin + JumperAnim:=165+Laskuri div 7; + px:=37; + if (laskuri<14) then px:=0; + end; + + if (ponnistus>0) then JumperAnim:=PonnAnim(ponnphase); + + { Pudotetaan „ij„ } + + kor:=Profiili(x); + + px:=px*pxk; { Hanaa... } + + if (px>maxspeed) then begin px:=maxspeed; {beep(2);} end; + + if (ponnistus>0) then + begin + { ponnistuslis„ys } + px:=px+0.21; + py:=py+1.21; + { pl:=pl-(5*0.01); } + kulma1:=kulma1+12; + + if (ponnistus>16) then { Ponnistus liian aikaisin } + begin + + if (ponnistus=17) then + begin + pl:=pl+0.023; + if (not cjumper) and (beeppi) then beep(1); + end; + + pl:=pl+0.013; + py:=py-1; + + + if (kierros>0) then stats[statsvictim,osakilpailu].Reason[kierros]:=1; + + kulma1:=158; { onko tarpeellinen?? } + + end; + end; + + + end; { end matkariippuvaiset } + + x:=round(matka+qx); + y:=round(kor); + + if (draw) then + begin + + DeltaX:=Maki.X; + DeltaY:=Maki.Y; + + if (x>=160) and (x<864) then inc(sx,x-fx); + if (y>=100) and (y<412) then inc(sy,y-fy); + + Maki.X:=sx; + Maki.Y:=sy; + + if (Maki.X>704) then Maki.X:=704; + if (Maki.Y>312) then Maki.Y:=312; + + Maki.Tulosta; + + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,Tuuli.Value,LMaara,true); + + if (goals) and (goalx>0) then DrawAnim(goalx-Maki.X,goaly-Maki.Y,66); { tavoitekeppi } + if (wrx>0) then DrawAnim(wrx-Maki.X,wry-Maki.Y,68); { m„kienkkakeppi } + + DrawAnim(x-Maki.X,y-Maki.Y-2,JumperAnim); + DrawAnim(x-Maki.X,y-Maki.Y-1,SkiAnim); + + if (cjumper) then writefont(x-Maki.X,y-Maki.Y-20,'C'); + +{ PutPixel(KeulaX-Maki.X,Profiili(KeulaX)-Maki.Y,15); } + +{ tempb:=SuksiAnim(x); } + +{ Lumi.Update(Video,128,(DeltaX-Maki.X)*2,(DeltaY-Maki.Y)*2); } + +{ Writefont(x-Maki.X+20,y-Maki.Y-20,txt(round(px))); } +{ Writefont(x-Maki.X,y-Maki.Y-25,txt(round(pl*100))); } +{ Writefont(x-Maki.X-20,y-Maki.Y-20,txt(round(py))); } + +{ Writefont(x-maki.x,y-maki.y-25,txt(deltah[0])); + Writefont(x-maki.x,y-maki.y-19,txt(deltah[1])); + Writefont(x-maki.x,y-maki.y-13,txt(deltah[2])); } + +{ Writefont(x-Maki.X-20,y-Maki.Y-20,txt(round(kulma1))); } + +{ Writefont(x-Maki.X+20,y-Maki.Y-20,txt(round(kulmas))); + Writefont(x-Maki.X,y-Maki.Y-20,txt(ssuunta)); } +{ Writefont(x-Maki.X,y-Maki.Y-20,txt(makikulma(x))); } +{ Writefont(x-Maki.X,y-Maki.Y-20,txtp(hp)); } + +{ if (ponnistus>0) then + begin + Writefont(x-Maki.X,y-Maki.Y-40,txt(ponnistus)); + Writefont(x-Maki.X+30,y-Maki.Y-40,txt(kulmas)); + end; +} + + if (windplace>10) then Tuuli.Tuo(x-Maki.X,y-Maki.Y); + + Tuuli.Piirra; + +{ if (ex) then balk(0); } + + WaitRaster; + + RD[0,RTurns]:=byte(128+x-fx); + RD[1,RTurns]:=byte(128+y-fy); + RD[2,RTurns]:=JumperAnim; + RD[3,RTurns]:=SkiAnim; + RD[4,RTurns]:=byte(Tuuli.value+128); + if (matka<0) then RFlstart:=Rturns else RFlstop:=Rturns; + + inc(RTurns); + +{ if (ex) then balk(1); } + +{ if (matka>0) then writefont(10,10,1,'!'); } + + Maki.PaivitaRuutu; + +{ if (matka<0) then delay(500); } + +{ if (ponnistus>0) then ch:=readkey; + + if (ch=#13) then out:=true; } + +{ if (matka>-5) then ch:=readkey; } + +{ if (height<8) and (matka>=0) then ch:=readkey; } + + end; { if draw } + +(* + if (x>1015) then begin draw:=false; out:=true; end; { lent„„ ulos ruudusta u nou } +*) + + until (Out); { *** LENTO LOPPUU *** } + + kkor:=kor-KeulaY; + hp:=round(nsqrt((matka*matka)+(kkor*kkor))*acthill.pk*0.5)*5; + + if (ch=#27) then { painoi ESCi„ } + begin + hp:=0; + score:=0; + landing:=1; + CStats[kierros,pel]:=hp; + stats[statsvictim,osakilpailu].RoundPts[kierros]:=score; + stats[statsvictim,osakilpailu].RoundLen[kierros]:=hp; + end else + begin + inc(Profile[actprofile].totaljumps); + + grade:=0; + if (kr<>0) then grade:=round(hp/kr)*10; + + temp:=MakiKulma(x); + height:=round((temp*1.34) + (kulma1/10)); + + riski:=jumprisk(temp); + if (hp<20/3*kr) then riski:=1; { lyhyiden hyppyjen riski? } + + if (height<63) then riski:=round(riski*(1+((63-height)*0.075))); + +{ laskuri:=round(2.5*sqr(sqr(sqr(sqr(sqr(((hp/10)/kr))))))+((hp/10)/kr*2)-1); } + +{ riski:=10 * riski; } + + if (landing=0) or (height < 56) then + begin + if (kierros>0) then stats[statsvictim,osakilpailu].Reason[kierros]:=2; + kupat:=2; + if (landing=0) then kupat:=1; + end; + + if (landing=1) then { telemark-juttuja } + begin + inc(riski,2*riski); +{ inc(laskuri,3*laskuri); } + + if (height<60) then dec(tyylip[1],5); + if (height<64) then dec(tyylip[1],5); + end; + + +{ writefont(270,10,txt(round(makikulma(x)))); } + +{ writefont(270,20,txt(round(kulma1/10))); + writefont(270,30,txt(round((makikulma(x)*1.34) + (kulma1/10)))); } + +{ writefont(260,40,'K'+txt(round(temp))); + writefont(260,20,'OLD-R'+txtp(laskuri)); } +{ writefont(260,30,'NEW-R'+txtp(riski)); } + +{ writefont(270,30,'L'+txt(kulmalaskuri)); } +{ writefont(260,40,'H'+txt(height)); } + +{ drawscreen; + readkey; } + + if (random(1000)0) then stats[statsvictim,osakilpailu].Reason[kierros]:=3; + kupat:=3; + end; + + for temp:=1 to round((kr+(kr/20)-(hp/10))/6) do + tyylip[1]:=tyylip[1]-5; + + if (kupat>0) then tyylip[1]:=tyylip[1]-100 + else + if (landing=2) then dec(tyylip[1],15+random(2)*5); { tasajalka tuomarirokotus } + + for temp:=2 to 5 do + begin + temp2:=random(4); + tyylip[temp]:=tyylip[1]; + tyylip[temp]:=tyylip[temp]-(temp2-1)*5; { ennen temp2-2 } + end; + + for temp:=1 to 5 do + begin + if (tyylip[temp]>200) then tyylip[temp]:=200; + if (tyylip[temp]<0) then tyylip[temp]:=0; + if (tyylip[temp]>tyylip[7]) then tyylip[7]:=tyylip[temp]; + if (tyylip[temp]0) then inj[pel]:=injured; { LOUKKAANTUMINEN!!! } + +{ if (kupat=1) then inj[pel]:=1; + if (kupat=2) then inj[pel]:=3; + if (kupat=3) then inj[pel]:=6; } + + score:=0; + +{ splitscreen(60); + waitraster; } + +{if (ch<>#27) then} + + for temp:=1 to 5 do inc(score,tyylip[temp]); + + dec(score,tyylip[6]); { pienin ja suurin pois } + dec(score,tyylip[7]); + + if (kr<>0) then { vanha tyyli } + inc(score,round(((hp/10)-(kr*2/3))*(180/kr)*10)); { pituuspisteet } + +(* + if (kr<>0) then { uusi fis:in mukainen } + inc(score,round((hp-(kr*10))*(lengthpoint(kr)/10)+600)); { pituuspisteet } + + if (kr>=160) then inc(score,600); { lentom„ist„ saa isot pisteet } +*) + + if (score>paras) then { harjoituskamaa } + begin + paras:=score; + parasp:=hp; + end; + + if (kierros=-10) then pisteet[NumPl+1]:=score; + + if (not jcup) and (kierros>=0) then + begin + inc(pisteet[pel],score); { Oma pelaajan pisteet } + CStats[kierros,pel]:=hp; + +(* if (ex) then Cstats[kierros,pel]:=height*10+landing; *) + +(* Cstats[kierros,pel]:=ponnistus*10; { yl”svaan } *) + end; + + if (jcup) then inc(pisteet[team],score); + + if (kierros>=0) then + begin + stats[statsvictim,osakilpailu].RoundPts[kierros]:=score; + stats[statsvictim,osakilpailu].RoundLen[kierros]:=hp; + end; + + for temp:=1 to 5 do inc(tyylip[temp],10000); + + hillrecord:=false; + + if (wcup) and (cupstyle=0) and (hp > Profile[actprofile].bestwcjump) then + begin { vain real world cup } + Profile[actprofile].bestwcjump := hp; + Profile[actprofile].bestwchill := nytmaki; + end; + + if (hp > Profile[actprofile].bestjump) then + begin + Profile[actprofile].bestjump := hp; + Profile[actprofile].besthill := nytmaki; + Profile[actprofile].besthillfile:='HILLBASE'; + if (nytmaki>NumWCHills) then + Profile[actprofile].besthillfile:=hillfile(nytmaki-NumWCHills); + end; + + if (not koth) and (kupat=0) and (not treeni) and (hp > HRLen(nytmaki)) then + hillrecord:=true; + + if (cjumper) and (not comphrs) then hillrecord:=false; { ei saa } + + if (hillrecord) then + begin + { + dwritefont(200,24,'NEW HILLRECORD!!!'); + dwritefont(200,32,'NEW: '+txtp(hp)+'Ģ'); + writefont(270,32,7,'('+txtp(MEPituus[nytmaki])+'Ģ)'); } + + if (cjumper) then namestr:=namestr+'˙'; + + SetHRinfo(nytmaki,namestr,hp,dayandtime(Today,Now)); + +{ HR[nytmaki].len:=hp; } +{ HR[nytmaki].name:=namestr; } +{ HR[nytmaki].time:=dayandtime(Today,Now); } + + if (kierros>0) then stats[statsvictim,osakilpailu].Reason[kierros]:=5; + + ThisIsAHillRecord:=(kierros*1000)+pel; + + end; +{ + fillbox(100,100,300,180,1); + writefont(110,110,1,'PONN '+txt(ponnistus)); + writefont(110,120,1,'HP '+txtp(hp)); + Maki.Paivitaruutu; + putsaa; + ch:=readkey; } + + laskuri:=0; + startanim:=100; { start "nousepa yl”s"-kuvio } + + OK:=boolean(random(2)); { if OK then sukset j„„ kiinni } + + if (landing=2) then dec(startanim,50); + + umatka:=matka; { ukon koordinaatit, jos sukset l„htee alta... } + ukor:=kor; + upx:=px; + + { if (gdetail=0) or (not cjumper) then} FontColor(247); + + Out:=False; + +{ kupat:=3; } + + if (kupat>0) then grade:=kupat; + + if (draw) then + repeat { *** LASKU *** } + + Tuuli.Hae; + + inc(laskuri); + + matka:=matka+(px*0.008); + umatka:=umatka+(upx*0.008); + + if (OK) then matka:=umatka; + + fx:=x; + fy:=y; + + x:=round(matka+qx); + ux:=round(umatka+qx); + + kor:=Profiili(x); + ukor:=Profiili(ux); + + { if (x<1010) then} + + SkiAnim:=SuksiLaskussa(MakiKulma(x)); + + JumperAnim:=LaskuAnim(SkiAnim, landing); { t„t„ voi my”s sitten muuttaa jos haluaa } + + if (laskuri<7) and (landing>0) then JumperAnim:=113+landing; { esilaskeutuminen } + + if (kupat>0) then + begin + + if (laskuri>50) and (upx>0) then upx:=upx-0.8; + if (upx<0) then + begin + upx:=0; + if (OK) then Out:=True; + end; + + case kupat of + 1,2 : begin { ei alastuloa, „ij„ suoraan turvalleen } + + temp:=2-(kulma1 div 80); + if (temp<0) then temp:=0; + + tempb:=142+laskuri div 10+temp; + + if (kupat=2) then tempb:=142+(laskuri-6) div 10+temp; + + if (tempb>145) then + begin + tempb:=144; + case (SuksiLaskussa(MakiKulma(ux))-71) of + 4 : tempb:=145; + 5 : tempb:=146; + 6 : tempb:=147; + 7..12 : tempb:=148; + end; { case } + end; + + if not ((kupat=2) and (laskuri<6)) then JumperAnim:=tempb; + + end; + + 3 : if (laskuri>14) then { liian pitk„ - esilaskeut. & v„h„n norm. laskua } + begin + + tempb:=151+(laskuri-14) div 10; + + if (tempb>155) then + begin + tempb:=163; + case (SuksiLaskussa(Makikulma(ux))-71) of + 3..4 : tempb:=162; + 5..6 : tempb:=161; + 7..12 : tempb:=160; + end; { case } + end else if (landing=2) then inc(tempb,5); + + JumperAnim:=tempb; + end; + + end; { case } + + end else + begin { ei kaatuna } + + if (laskuri>startanim) then + begin + temp:=(laskuri-startanim) div 12; + if (temp>6) then temp:=6; + + case temp of + 0 : tempb:=122+(landing*6); + 1 : tempb:=123+(landing*6); + 2 : tempb:=136; + 3..6 : begin + tempb:=136; { peruslasku } + case grade of + 0..75 : begin { h„pe„ v„h„n } + tempb:=137; + { if (temp>4) and (grade<50) then tempb:=138; } + end; + + 105..200 : begin { yeah! } + tempb:=139; + if (temp>3) then + if (grade>114) then tempb:=141 else tempb:=140; + +{ if (temp>4) and (grade>114) then tempb:=141; } + end; + + end; { case grade } + + end; + end; { case } + + JumperAnim:=tempb; + + end; + + end; + + Ch:=#0; + + if (keypressed) then + begin + readkbd(ch,ch2); + end; + if (ch=#0) and (Ch2=#68) then begin cupslut:=true; ch:=#27; end; + if (Ch=#27) or (Ch=#13) then Out:=True; + if (Ch='p') then readkbd(ch,ch2); + + DeltaX:=Maki.X; + DeltaY:=Maki.Y; + + x:=round(matka+qx); + y:=round(kor); + + if (x>=160) and (x<864) then inc(sx,x-fx); + if (y>=100) and (y<412) then inc(sy,y-fy); + + Maki.X:=sx; + Maki.Y:=sy; + + if (Maki.X>704) then Maki.X:=704; + if (Maki.Y>312) then Maki.Y:=312; + + Maki.Tulosta; + +{ PutPixel(KeulaX-Maki.X,Profiili(KeulaX)-Maki.Y,15); } +{ tempb:=SuksiAnim(x); } +{ Writefont(x-maki.x,y-maki.y-15,txt(SkiAnim-71)); } +{ Writefont(x-Maki.X,y-Maki.Y-20,txt(makikulma(x))); } +{ Writefont(x-Maki.X+15,y-Maki.Y-15,txt(kulma1)); } +{ DrawAnim(x-Maki.X,y-Maki.Y-2,JumperAnim); } + +{ Writefont(10,192,'LJA: '+txt(JumperAnim)); + Writefont(60,192,'LSA: '+txt(SkiAnim)); } + +{ if (JumperAnim>NumofAnims) or (SkiAnim>NumofAnims) or + (JumperAnim<1) or (SkiAnim<1) then + begin + beep(1); + writefont(100,80,'LASKU!'); + writefont(100,100,'JAnim: '+txt(JumperAnim)); + writefont(100,120,'SAnim: '+txt(SkiAnim)); + maki.paivitaruutu; + ch2:=readkey; + end; +} + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,Tuuli.Value,LMaara,true); + + if (goals) and (goalx>0) then DrawAnim(goalx-Maki.X,goaly-Maki.Y,66); { tavoitekeppi } + if (wrx>0) then DrawAnim(wrx-Maki.X,wry-Maki.Y,68); { m„kienkkakeppi } + + DrawAnim(ux-Maki.X,round(ukor)-Maki.Y-2,JumperAnim); + DrawAnim(x-Maki.X,y-Maki.Y-1,SkiAnim); + +{ Lumi.Update(Video,128,(DeltaX-Maki.X)*2,(DeltaY-Maki.Y)*2); } + +(* drawanim(297,5,59); { sapluuna } *) +{ drawanim(300,60,59); } + +{ drawanim(298,9,59); } + + if (cjumper) then writefont(x-Maki.X,y-Maki.Y-20,'C'); + + if (x>1050) then Out:=True; + + DrawAnim(227,2,64); { hillrec sapluun } + + ewritefont(308,9,namestr); + +{ temp2:=311; } + temp2:=308; +{ if (kierros=2) then temp2:=280; } + + ewritefont(temp2,33,txtp(hp)+'Ģ'); + + if (hillrecord) and (not Out) then + begin + if (laskuri mod 30 < 15) then writefont(260,33,'HR!'); +{ writefont(279+random(3),71+random(3),txtp(hp)+'Ģ'); } + + if (random(2)=0) then ewritefont(temp2-1+random(3),32+random(3),txtp(hp)+'Ģ'); + +{ writefont(280,72,txtp(hp)+'Ģ'); } + end; + + { tyylipisteet ruutuun } + + temp:=random(5)+1; + if (random(20)=1) and (tyylip[temp]>9999) then dec(tyylip[temp],10000); + + for temp:=1 to 5 do + if (tyylip[temp]<9999) then + ewritefont(308-(temp-1)*24,21,txtp(tyylip[temp])); + { ewritefont(304,25+(temp-1)*11,txtp(tyylip[temp])); } + +{ ewritefont(304,8,namestr); } + +{ if (ex) then balk(0); } + + WaitRaster; + + RD[0,RTurns]:=byte(128+x-fx); + RD[1,RTurns]:=byte(128+y-fy); + RD[2,RTurns]:=JumperAnim; + RD[3,RTurns]:=SkiAnim; + RD[4,RTurns]:=byte(Tuuli.value+128); + + inc(RTurns); + +{ if (ex) then balk(1); } + + Maki.PaivitaRuutu; + +{ delay(500); } + + until (Out); { LASKU LOPPUU } + +{ StopSound(5); + StopSound(4); } + + fx:=0; { k„ytet„„n effektiivisten tyylipisteiden l”yt„miseen :) } + fy:=0; + + for temp:=1 to 5 do { tyylipisteet n„ytt””n ja poisj„„v„t tummaksi } + begin + + if (tyylip[temp]>9999) then dec(tyylip[temp],10000); + + if (draw) and ((gdetail=0) or (not cjumper)) then fontcolor(247); + + if (tyylip[temp]=tyylip[6]) and (fx=0) then + begin if (draw) and ((gdetail=0) or (not cjumper)) then fontcolor(252); inc(fx); end; + + if (tyylip[temp]=tyylip[7]) and (fy=0) then + begin if (draw) and ((gdetail=0) or (not cjumper)) then fontcolor(252); inc(fy); end; + +{ ewritefont(304,25+(temp-1)*11,txtp(tyylip[temp])); } + if (draw) then ewritefont(308-(temp-1)*24,21,txtp(tyylip[temp])); + + end; + + if (jcup) then + begin + if (draw) and ((gdetail=0) or (not cjumper)) then FontColor(241); + + if (draw) then EWritefont(302,14,jnimet[team]); +{ EWritefont(302-FontLen(namestr),9,jnimet[16-pel]); } + end; + + if (draw) and ((gdetail=0) or (not cjumper)) then FontColor(240); + + if (draw) then EWriteFont(308,9,namestr) + else + begin + EWriteFont(296,9,lstr(57)); + EWriteFont(308,9,txt(index)); { computers jumping... } + end; + +{ + WriteFont(160,9,'P'+txt(ponnistus)); + WriteFont(160,21,'R'+txtp(riski)); + Writefont(160,45,'RL'+txt(reflexlaskuri div 5)); } + + if (draw) and ((gdetail=0) or (not cjumper)) then FontColor(247); + +{ drawscreen; + readkey; } + + fx:=0; { seuraavassa: osallistujat } + fy:=0; { - " - : sijoitus } + + temp2:=0; + + if (not koth) and (kierros>=0) then { komea "monesko olen nyt?"-laskuri! } + begin + + fx:=NumPl; + if (jcup) then fx:=NumTeams; + + for temp:=1 to fx do + begin + if (jcup) then temp2:=pisteet[team] { omat pisteet } + else temp2:=pisteet[pel]; + + if (temp2 >= pisteet[temp]) then inc(fy); + end; + + if (draw) then ewritefont(255,45,'($'+txt(fx-fy+1)+'.)'); + + end; + + fx:=308; + + if (draw) and (hillrecord) then + begin + writefont(260,33,'HR!'); + fontcolor(246); + end; + + if (draw) then ewritefont(fx,33,txtp(hp)+'Ģ'); + + if (draw) and ((gdetail=0) or (not cjumper)) then fontcolor(246); + + temp2:=score; + + if (jcup) then temp2:=pisteet[team]; + if (wcup) or (koth) then temp2:=pisteet[pel]; + + if (wcup) and (kierros<0) then temp2:=score; + + if (draw) then + begin + ewritefont(308,45,txtp(temp2)); { score } + if (gdetail=0) or (not cjumper) then fontcolor(241); + + if (draw) and (kierros=2) and (wcup) then + begin + ewritefont(255,33,txtp(CStats[1,pel])+'Ģ'); + ewritefont(311,55,'('+txtp(score)+')'); + end; + + if (jcup) and (index*kierros>1) then + begin + ewritefont(311,55,'('+txtp(score)+')'); + end; + + if (inj[pel]>0) and (wcup) then + begin + fontcolor(239); +{ str1:='LEGS.'; + if (inj[pel]=1) then str1:='LEG.'; + writefont(12,176,'WILL MISS NEXT '+txt(inj[pel])+str1); } + + str1:=txt(inj[pel])+' '+lstr(76); + + case inj[pel] of + 1 : str1:=lstr(77); + 2 : str1:=lstr(78); + end; + + { ewritefont(212,33,'INJ-'+txt(inj[pel]-1)); } + ewritefont(311,64,lstr(75)+' '+str1); + + end; + end; + + if (not draw) and (gdetail=0) then + begin +{ tuuli.value:=tuulisafe; } + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,tuuli.value,LMaara,false); { pakko piirt„„ } + end; + + if (draw) and (not cjumper) and (grade>0) and + (Profile[actprofile].cstyle>0) then DoCoachCorner(height,kulmalaskuri,grade,ponnistus,Profile[actprofile].cstyle); + +{ if (landing=2) then writefont(160,45,'TASA'); + WriteFont(160,33,'K'+txt(height)); } + + dec(RTurns); { niit„ on yksi liikaa } + +{ Writefont(100,100,'T'+txt(RTurns)); } +{$IFDEF REG} + if (not cjumper) and (draw) then EWritefont(308,73,lstr(298)); +{$ENDIF} + + DrawScreen; + +{ delay(100); } + + if (draw) then + begin + Putsaa; + cupslut:=WaitForKey2; + + end + else + if (keypressed) then + begin + readkbd(ch,ch2); + if (ch=#0) and (ch2=#68) then cupslut:=true; + end; + end; + +{ if (ch=#68) then begin cupslut:=true; ch:=#27; end; } + + Maki.Lopeta; + +{ AsetaMoodi($3); } + + { KIRJOITA REPLAY! } + +{$IFDEF REG} + if (draw) and (not cjumper) then + begin + str1:=profile[actprofile].realname; + if (str1='') then str1:=profile[actprofile].name; + + if (upcase(ch)=lch(298,2)) then + begin + temp:=replayinfo(replayfilename, str1, replayname, nytmaki, hp); + if (temp=0) then temp:=writereplay(str1, replayname); + resultbox(1,temp); + end; + + if (hillrecord) and (automatichrr) then + begin + replayfilename:='HR-'+copy(acthill.name,1,3); + replayname:='HILL RECORD AT '+acthill.name+' K'+txt(acthill.kr); + writereplay(str1,replayname); + end; + end; +{$ENDIF} + +{ if (ex) then + begin + + fontcolor(240); + writefont(60,10,'Normaali lopetus'); + + writefont(60,20,'KeulaX: '+txt(keulaX)); + writefont(60,30,'KeulaY: '+txt(profiili(keulaX))); + writefont(60,40,'Ponn: '+txt(ponnistus)); + + drawscreen; + readkey; + + end; +} + +end; + + + + + + + +procedure showstats; +var count : longint; + temp, yy, xx, kierros : integer; + player, team, cup : integer; + str1 : string; + col : array[0..20] of integer; + + procedure WS(cln,clr:byte;str2:string); + var color : byte; + begin + if (clr=0) then + begin + color:=240+(cln mod 2)*6; +(* case cln of + 1,3,5 : color:=246; + 0,2,4,6,8,10 : color:=240; + 7,11 : color:=247; + 9,12 : color:=249; + end; { case } *) + end else color:=clr; + + FontColor(color); + if (cln=1) then Writefont(col[cln],yy,str2) + else EWritefont(col[cln],yy,str2); + + end; + + +begin + +if (jcup) then + + for team:=0 to jmaara-1 do + begin + + NewScreen(1,5); + + FontColor(240); + writefont(30,6,lstr(93)+' '+jnimet[15-team]); + + count:=0; + + col[0]:=11; + col[1]:=12; + col[2]:=62; + col[3]:=90; + col[4]:=103; + + xx:=0; + + for temp:=1 to 3 do + begin + inc(xx,70); + col[(temp*3)+2]:=col[2]+xx; + col[(temp*3)+3]:=col[3]+xx; + col[(temp*3)+4]:=col[4]+xx; + end; + + yy:=23; + + fontcolor(241); + + Writefont(col[1],yy,lstr(106)); + + for temp:=0 to 3 do + begin + ewritefont(col[2+temp*3],yy,lstr(108)); + ewritefont(col[3+temp*3],yy,lstr(109)); + ewritefont(col[4+temp*3],yy,'?'); + end; + + fontcolor(247); + inc(yy,7); + + for temp:=1 to 4 do + begin + writefont(col[2+(temp-1)*3]-15,yy,nsh(nimet[NumPl+1-(team*4)-temp],64)); + end; + + inc(yy,7); + + for cup:=1 to osakilpailu do + begin + WS(0,240,txt(cup)+'.'); + + temp:=HillOrder[cup]; + + WS(1,246,copy(hillname(temp),1,3)+' '+txt(hillkr(temp))); + + for player:=1 to 4 do { b on player, a on cup, d on team } + begin +{ if Stats[b+d*4,a].RoundLen[1]=1 then textcolor(15) else textcolor(11); } + temp:=player+(team*4); + xx:=(player-1)*3; + + yy:=(cup-1)*21+37; + + for kierros:=1 to 2 do + begin + WS(2+xx,246,txt(Stats[temp,cup].RoundLen[kierros])+'.'); + WS(3+xx,240,txtp(Stats[temp,cup].RoundPts[kierros])); + WS(4+xx,247,makeletter(Stats[temp,cup].Reason[kierros])); + inc(yy,7); + end; + + end; + + if (Stats[team,cup].CompPos<9) then inc(count,TeamPoints[Stats[team,cup].CompPos]); +{ if Stats[b+d*4,a].CompPos=1 then textcolor(15) else textcolor(14); } + + fontcolor(247); + writefont(col[1],yy,lstr(107)); + ewritefont(82,yy,lstr(108)); + fontcolor(246); + ewritefont(100,yy,txt(Stats[team,cup].CompPos)+'.'); + + fontcolor(247); + ewritefont(122,yy,lstr(110)); +{ if Stats[d,a].WCPos=1 then textcolor(31) else textcolor(15); } + str1:='- '; + if (count>0) then str1:=txt(Stats[team,cup].WCPos)+'.'; + + fontcolor(246); + ewritefont(140,yy,str1); + + fontcolor(247); + ewritefont(162,yy,lstr(109)); + fontcolor(246); + ewritefont(186,yy,txt(count)); + + inc(yy,7); + + end; + + DrawScreen; + cupslut:=Waitforkey2; + + end else + + begin + + player:=1; + + str1:=lstr(89); + + ResetList(pmaara,NumPl,7,str1,InvBack); + + repeat + + FontColor(240); + + writefont(36+fontlen(lstr(89)),6,nsh(nimet[NumPl+1-player],110)); + + count:=0; + + col[0]:=15; + col[1]:=16; + col[2]:=70; + col[3]:=90; + col[4]:=110; + col[5]:=140; + + col[6]:=170; { R1 } + col[7]:=210; { m } + col[8]:=230; { pos after R1 } + col[9]:=240; + col[10]:=268; { R2 } + col[11]:=308; { m } + col[12]:=316; + + yy:=23; + + fontcolor(247); + +{ EWritefont(col[0],yy,'#'); } + Writefont(col[1],yy,lstr(106)); + EWritefont(col[2],yy,lstr(108)); + EWritefont(col[3],yy,lstr(109)); + EWritefont(col[4],yy,lstr(98)); + EWritefont(col[5],yy,lstr(97)); + EWritefont(col[6],yy,'R 1'); + EWritefont(col[8],yy,lstr(108)); + EWritefont(col[9],yy,'?'); + EWritefont(col[10],yy,'R 2'); + EWritefont(col[12],yy,'?'); + + FontColor(246); + + yy:=25; + + for cup:=1 to osakilpailu do + begin + inc(yy,7); + + WS(0,0,txt(cup)+'.'); + + WS(1,0,copy(hillname(cup),1,3)+' '+txt(hillkr(cup))); + + str1:='dq'; { didn't qualify } + + temp:=Stats[player,cup].CompPos; + + if (temp>0) and (temp<51) then str1:=txt(temp)+'.'; + + WS(2,0,str1); { Kisa Pos } + + str1:='0'; + + if (temp>0) and (temp<31) then + begin + str1:=txt(WCpoints[temp]); + inc(count,WCpoints[temp]); + end; + + WS(3,0,str1); { Kisasta pisteit„ } + + str1:='-'; + if (count>0) then str1:=txt(Stats[player,cup].WCPos)+'.'; + + WS(4,0,str1); { WC sija t„n skaban j„lkeen } + + if (temp>0) and (temp<51) then + begin + WS(5,0,txtp(Stats[player,cup].RoundPts[1]+Stats[player,cup].RoundPts[2])); + + WS(6,0,txtp(Stats[player,cup].RoundPts[1])); + + str1:='('+txtp(Stats[player,cup].RoundLen[1])+'Ģ)'; + WS(7,247,str1); + + WS(8,0,txt(Stats[player,cup].Round1Pos)+'.'); + + end; + + temp:=Stats[player,cup].RoundPts[2]; + + if (temp>0) then + begin + WS(10,0,txtp(temp)); + WS(11,247,'('+txtp(Stats[player,cup].RoundLen[2])+'Ģ)'); + end; + + + temp:=Stats[player,cup].Reason[1]; + if (temp>0) then WS(9,247,makeletter(temp)); + + temp:=Stats[player,cup].Reason[2]; + if (temp>0) then WS(12,247,makeletter(temp)); + + if (cup=12) and (osakilpailu<>12) then + begin + inc(yy,7); + + if (not InvBack) then + begin + fillbox(0,yy,319,yy+6,245); + fillarea(0,yy,319,yy+6,63); + end; + + fontcolor(240); + writefont(col[1],yy,lstr(99)); + + Ewritefont(col[2],yy,txt(Stats[player,0].CompPos)+'.'); + + Ewritefont(col[5],yy,txtp(Stats[player,0].RoundPts[1])); + end; + + end; + + + inc(yy,8); +{ fillline(15,'-'); } + + fillbox(2,yy,316,yy,241); + fillbox(3,yy+1,317,yy+1,242); + + inc(yy,3); + + WS(1,0,lstr(100)); + +{ if (Stats[d,a].WCPos=1) then textcolor(31) else textcolor(15); } + WS(3,0,txt(count)); + + if (count>0) then WS(4,0,txt(Stats[player,cup].WCPos)+'.'); + + count:=0; + for cup:=1 to osakilpailu do + inc(count,Stats[player,cup].RoundPts[1]+Stats[player,cup].RoundPts[2]); + FontColor(251); + EWritefont(col[5],yy,txtp(count div osakilpailu)); + + count:=0; + for cup:=1 to osakilpailu do + inc(count,Stats[player,cup].RoundPts[1]); + FontColor(241); + EWriteFont(col[6],yy,txtp(count div osakilpailu)); + + count:=0; + for cup:=1 to osakilpailu do + inc(count,Stats[player,cup].RoundPts[2]); + EWritefont(col[10],yy,txtp(count div osakilpailu)); + +{ writefont(300,180,txt(player)); + drawscreen; delay(1000); } + + str1:='X'; + + if (player=pmaara) then str1:='L'; + player:=Entry(player,0,0,'',0,0,0,str1); + + if (player=-2) then cupslut:=true; + +{ writefont(300,180,txt(player)); + drawscreen; delay(1000); } + + until (player<0) or (player>pmaara); + +{ DrawScreen; + + CupSlut:=waitforkey2(ch); } + + end; + + +end; + + + + +procedure dokothrecords(high:byte); +var temp,yy : integer; + col : array[1..4] of integer; + str1 : string; +begin + + col[1]:=30; + col[2]:=55; + col[3]:=175; + col[4]:=290; + + fontcolor(240); + writefont(30,6,lstr(160)); + +{ fontcolor(251); + writefont(col[1]+12,23,'CHALLENGE'); } + +{ + fontcolor(241); + writefont(col[2],30,'WHO?'); + writefont(col[3],30,'WHEN?'); + writefont(col[4]-40,30,'HOW MANY TIMES?'); } + + yy:=12; + + for temp:=1 to 6 do + begin + + inc(yy,18); + + fontcolor(246); + + writefont(col[1],yy,kothtitle(temp)); + + inc(yy,10); + + fontcolor(241); + str1:=lstr(161); + + if (top[temp+35].score>0) then + begin + + writefont(col[3],yy,top[temp+35].time); + + if (high=0) or (high=temp) then fontcolor(240); + str1:=top[temp+35].name; + writefont(col[4],yy,txt(top[temp+35].score)+' X'); { times completed } + + end; + + writefont(col[2],yy,str1); + + end; + + DrawScreen; + +end; + + + +procedure dolist(high,phase:byte); { h0 = main menusta,muuten kertoo mik„ highlightataan } +var temp,yy : integer; + entries, start, sortby : byte; + str1 : string; + col : array[0..5] of integer; + + Hi : Hiscore; + NumCustoms : integer; + Files : array [0..MaxCustoms] of FileStr; + +begin + + yy:=6; + + col[0]:=30; + col[1]:=146; + col[2]:=173; + col[3]:=215; + + fontcolor(240); + sortby:=0; { 0-WC, 1 - Total points } + + case phase of + 0 : begin + str1:=lstr(163); + entries:=20; start:=1; + end; + 1 : begin + str1:=lstr(164); + entries:=10; start:=21; + end; + 2 : begin + str1:=lstr(165); + entries:=5; start:=31; + if (high=0) then yy:=126; + sortby:=1; + end; + else + begin + + FindCustoms(NumCustoms, Files); + str1:=lstr(162); + start:=(phase-3)*20; + entries:=NumCustoms-start; + if (entries>20) then entries:=20; + col[0]:=50; + col[1]:=157; + col[2]:=184; + + end; + + end; {case} + + writefont(30,yy,str1); + + inc(yy,17); + + fontcolor(246); + + if (phase>2) then + begin + writefont(5,yy,lstr(173)); { file } + writefont(col[0],yy,lstr(171)); { name -> who? } + ewritefont(col[1]+10,yy,lstr(167)); + writefont(col[2]+9,yy,lstr(109)); { points -> pts } + end + else + begin { muutoin normaalisti } + writefont(col[0],yy,lstr(166)); + writefont(col[1],yy,lstr(167)); + writefont(col[2],yy,lstr(168)); + end; + + writefont(col[3],yy,lstr(169)); + + for temp:=start to start+entries-1 do + begin + + inc(yy,8); + + hi:=top[temp]; + + if (phase>2) then + begin + loadcustom(files[temp-start+1],sortby,hillorder,cuphills); + hi:=top[42]; + end; + + if (high=0) then + begin + fontcolor(246); + if (phase<3) then ewritefont(24,yy,txt(temp-start+1)+'. '); + + fontcolor(240); + if (hi.name[length(hi.name)]='˙') then fontcolor(247); + end else + begin + fontcolor(241); + if (temp-start+1=high) then fontcolor(240); + ewritefont(24,yy,txt(temp-start+1)+'. '); + end; + + writefont(col[0],yy,nsh(hi.name,110)); + ewritefont(col[1]+14,yy,txt(hi.pos)+'.'); + + str1:=txt(hi.score); + if (sortby=1) then str1:=txtp(hi.score); + ewritefont(col[2]+24,yy,str1); + + fontcolor(241); + writefont(col[3],yy,hi.time); + if (phase>2) then writefont(5,yy,files[temp-start+1]); + + end; + + DrawScreen; + +end; + + +procedure dohillrec(phase:byte); + { phase: 0 - normals, 1... - extras } +var aa,yy : integer; + start, loop, apu1 : integer; + str1 : string; + col : array [0..5] of integer; + ahi, laskuri : longint; + + begin + + col[0]:=3; + col[1]:=71; + col[2]:=183; + col[3]:=200; + col[4]:=216; + + start:=phase*20; + + fontcolor(240); + + str1:=lstr(156); + + ahi:=0; + + if (phase=0) then str1:=lstr(170); + + loop:=NumWCHills+NumExtraHills - start; + if (loop>20) then loop:=20; + + writefont(30,6,str1); + + writefont(col[0],23,lstr(106)); + writefont(col[1],23,lstr(171)); + ewritefont(col[2],23,lstr(172)); + writefont(col[3],23,'(K)'); + writefont(col[4],23,lstr(169)); + + for aa:=1 to Loop do + begin + yy:=(aa-1)*8+32; + + fontcolor(246); + writefont(col[0],yy,nsh(hillname(aa+start),64)); + + fontcolor(240); + str1:=HRname(aa+start); + + apu1:=HRLen(aa+start); + + if (str1[length(str1)]='˙') then + begin + fontcolor(247); + apu1:=hillkr(aa+start)*10; + end; + + inc(ahi,longint(apu1)); + + writefont(col[1],yy,nsh(str1,80)); + if (str1[length(str1)]<>'˙') then fontcolor(246); + ewritefont(col[2],yy,txtp(HRlen(aa+start))); + ewritefont(col[3]+11,yy,'('+txt(hillkr(aa+start))+')'); + + fontcolor(241); + + writefont(col[4],yy,HRtime(aa+start)); + + end; + + if (phase=0) then + begin + laskuri:=0; + for apu1:=1 to NumWChills do inc(laskuri,longint(hillkr(apu1)*10)); + + ahi:=round((ahi/laskuri)*10000); + str1:=txt(ahi); + insert('.',str1,length(str1)-1); + str1:=str1+' %'; + + writefont(130,192,'A.H.I.'); + ewritefont(197,192,str1); + end; + + DrawScreen; + +{ Waitforkey2(ch); } + +end; + + + +procedure showtops(phase:byte); + { phase: 0 - hiscores, 1 - hillrecs+extras, 2 - just hillrecs } +var index, num, numcustoms : integer; + str1 : string; + good, leave : boolean; +{ tempch, tempch2 : char; } + filenames : array [0..maxcustoms] of Filestr; + + +begin + + index:=1; + num:=4; + + if (phase=0) then FindCustoms(NumCustoms,Filenames); + + case phase of + 0 : if (numcustoms>0) then num:=(NumCustoms-1) div 20+4 + else num:=3; + 1 : { num:=2; } + num:=(NumExtraHills-1) div 20+2; + 2 : num:=1; + end; + + + repeat + + case phase of + 0 : case index of + 1 : begin + NewScreen(1,0); + dolist(0,0); + end; + 2 : begin + NewScreen(4,0); + dolist(0,1); + dolist(0,2); + end; + 3 : begin + NewScreen(1,2); + dokothrecords(0); + end; + else + begin + NewScreen(1,0); + dolist(0,index-1); + end; + end; + + 1 : if (index=1) then + begin + NewScreen(1,0); + dohillrec(0); + end else + begin + NewScreen(1,5); + dohillrec(index-1); + end; + 2 : begin + NewScreen(1,0); + dohillrec(0); + end; + end; + + fontcolor(241); + if (index>1) then ewritefont(319,5,'(-'+lstr(246)); + + str1:=lstr(247); + if (index=num) then str1:=lstr(248); + + ewritefont(319,13,str1+'-)'); + + DrawScreen; + + leave:=false; + + repeat + + good:=false; + + readkbd(ch,ch2); +{ ch2:=#1; } + + case ch of + #27 : begin index:=-1; good:=true; end; + + ' ',#13 : begin inc(index); good:=true; end; + #3 : begin index:=-2; good:=true; end; { CTRL-C } + + end; { case } + + if (ch=#0) then + case ch2 of + #68, #45 : begin index:=-2; good:=true; end; { ALT-X, F10 } + + #77,#81 : begin inc(index); good:=true; end; { PgDn, A_Right } + + #71 : if (index>1) then { HOME } + begin + index:=1; + good:=true; + end; + + #73,#75 : if (index>1) then { PgUp, A_Left } + begin + dec(index); + good:=true; + end; + + end; { case } + + until (good); + + if (index<0) or (index>num) then leave:=true; + + until (leave); + + +(* + + NewScreen(1,0); + dolist(0,0); + + waitforkey2(ch); + NewScreen(4,0); + + dolist(0,1); + dolist(0,2); + + waitforkey2(ch); + + NewScreen(1,2); + + dokothrecords(0); + + waitforkey2(ch); + +*) + +end; + + + + +function donewheader(vaihe:byte):string; { vaiheet: 0 - WCquali 1 - WC 2 - 4hills } +var out,str1, str2 : string; + temp3 : integer; +begin + +{ if (vaihe=2) then newscreen(1,4) else newscreen(1,0); } + +{ fontcolor(240); } + + out:=''; + + case vaihe of + 4 : begin + if (osakilpailu=CupHills) then out:=lstr(90)+' '+lstr(27+cupstyle) + else + begin + (* for temp:=1 to pmaara do begin {sija[g]:=51-g;} Stats[temp,osakilpailu].WCPos:=NumPl; end; + *) + out:=lstr(27+cupstyle)+' '+lstr(87)+' '+txt(osakilpailu)+' '+lstr(8)+' '+txt(CupHills); + end; + + end; + + 3 : begin + case cupstyle of + 0,2 : if (osakilpailu=12) or (osakilpailu=CupHills) then out:=lstr(85) + else + begin + temp3:=osakilpailu; + if (osakilpailu>4) then temp3:=osakilpailu-8; { joko yksin„„n tai osana WC:t„ } + str1:=txt(temp3)+' '+lstr(83)+' - '+acthill.name+' K'+txt(acthill.kr); + out:=lstr(84)+' '+str1; + end; + 1 : if (osakilpailu=CupHills) then out:=lstr(90)+' '+lstr(28) + else out:=lstr(28)+' '+lstr(87)+' '+txt(osakilpailu)+' '+lstr(8)+' '+txt(CupHills); + end; + end; + + 0,1,2 : begin + str1:=lstr(81); + if (vaihe=0) then str1:=lstr(82); + str2:=txt(osakilpailu)+' '+lstr(8)+' '+txt(CupHills); + if (cupstyle=2) then str2:=txt(osakilpailu)+' '+lstr(83); + str2:=str2+' - '+acthill.name+' K'+txt(acthill.kr); + if (kierros>0) then str2:=str2+' - R '+txt(kierros); + out:=str1+' '+str2; + end; + end; + +{ fillline(15,'-'); } + +{ if (vaihe=2) then textbackground(0) else textbackground(1); } + +{ b:=1;c:=3; } + + donewheader:=out; + +end; + + + +procedure compactsign; +begin + + fontcolor(241); + writefont(30,190,lstr(86)); + +end; + + + +procedure updatestats(what:byte); + { what: 0 - WCStats, 1 - normal, 2 - 4H } + +var temp, who, victim : integer; + str1 : string; + +begin + + for temp:=1 to NumPl do + begin + who:=luett[temp]; + if (what=0) then who:=mcluett[temp]; + + if (who > NumPl-pmaara) then { oma j„tk„ } + begin + victim:=Numpl+1-who; + + case what of + 0 : if (cupstyle=0) then + begin { WC pohjaisia statseja } + Stats[victim,osakilpailu].WCPos:=sija[who]; + if (osakilpailu=CupHills) then + begin + if (sija[who]=1) then inc(Profile[profileorder[victim]].WCswon); + inc(Profile[profileorder[victim]].WCs); + end; + + if (mcpisteet[who] >= Profile[profileorder[victim]].bestpoints) then + begin + Profile[profileorder[victim]].bestpoints:=mcpisteet[who]; + str1:='-'; + if (osakilpailu=CupHills) then str1:=txt(sija[who])+'.'; + Profile[profileorder[victim]].bestresult:= + txt(mcpisteet[who])+' ('+str1+')'; + end; + + end; + + 1 : begin { perus kisanaikaisia statseja } + Stats[victim,osakilpailu].Comppos:=sija[who]; + if (kierros=1) then Stats[victim,osakilpailu].Round1Pos:=sija[who]; + if (cupstyle=0) and (kierros=2) and (sija[who]=1) then inc(Profile[profileorder[victim]].legswon); + end; + 2 : begin + Stats[victim,0].RoundPts[1]:=fourpts[who]; { fourhills tulos talteen } + Stats[victim,0].CompPos:=sija[who]; + end; + + end; + + + end; + + end; + +end; + + + +function sorthighs(vaihe:byte):byte; + { vaihe: 0 - WC, 1 - TC, 2 - 4H, 3 - KOTH, 4 - CC_MC, 5 - CC_4P } + + { highstart: 0 - WC, 20 - TC, 30 - 4H, 35 - KOTH, 41 - CC } + +var t1,t2,t3,t4 : integer; + localnosamename, leave : boolean; + who, players : integer; + pts : longint; + highstart,highlength : byte; + victimname : string; + return : byte; +{ ch,ch2 : char; } + datestr : string; + +begin + + highstart:=0; + highlength:=20; + players:=pmaara; + return:=0; + localnosamename:=nosamename; + datestr:=dayandtime(Today,Now); + + case vaihe of + 1 : begin + players:=jmaara; + highstart:=20; + highlength:=10; + end; + 2 : begin + highstart:=30; + highlength:=5; + end; + 4,5 : begin + highstart:=41; + localnosamename:=true; { ei milloinkaan useampia nimi„ } + end; + end; + + for t1:=1 to players do + for t2:=1 to highlength do + begin + who:=NumPl+1-t1; + victimname:=nimet[who]; + + if (vaihe=1) then + begin + who:=NumTeams+1-t1; + victimname:=jnimet[who]; + end; + + case vaihe of + 0,1,4 : pts:=mcpisteet[who]; + 2,5 : pts:=fourpts[who]; + end; + + if (pcomp(pts,sija[who]) > pcomp(top[t2+highstart].score,top[t2+highstart].pos)) then + begin + + leave:=true; { tekeek” nimet vai ei } + + if (localnosamename) then + begin + for t3:=1 to t2-1 do + if (top[t3+highstart].name = victimname) then leave:=false; + + if (leave) then { ei ollut parempaa samaa nime„ } + begin + + for t3:=t2 to highlength do + if (top[t3+highstart].name = victimname) then + begin + for t4:=t3 to highlength-1 do + begin + top[t4+highstart].score:=top[t4+highstart+1].score; + top[t4+highstart].name:=top[t4+highstart+1].name; + top[t4+highstart].pos:=top[t4+highstart+1].pos; + top[t4+highstart].time:=top[t4+highstart+1].time; + end; + t3:=highlength; + end; + end; + + end; + + if (leave) then + begin + if (t23) and (cuphills=1) then + datestr:='('+txtp(Stats[t1,1].RoundLen[1])+'m-'+txtp(Stats[t1,1].RoundLen[2])+'m)'; + + top[t2+highstart].score:=pts; + top[t2+highstart].name:=victimname; + top[t2+highstart].pos:=sija[who]; + top[t2+highstart].time:=datestr; + + return:=t2; { pyrkii palauttamaan lis„tyn pelaajan sijan } + + if (vaihe<4) then + begin + NewScreen(1,0); + dolist(t2,vaihe); + waitforkey3(305,6,ch); + end; + + end; { if leave } + + t2:=highlength; + + end; + end; { end top } + + sorthighs:=return; + +end; + + +procedure updaterecords(sortby:byte); +var final, cscreen : boolean; + str1 : string; + t1, pts, who, temp2 : integer; + temp : byte; + oldhi : Hiscore; + + +begin + + final:=false; cscreen:=false; + + if (osakilpailu=CupHills) then final:=true; + + for t1:=1 to pmaara do + begin + who:=NumPl+1-t1; + + { pari profilesin parasta tulosta } + + if ((cupstyle=0) and (osakilpailu=12)) or ((cupstyle=2) and (final)) then + begin + if (fourpts[who] >= Profile[profileorder[t1]].best4points) then + begin + Profile[profileorder[t1]].best4points:=fourpts[who]; + str1:=txt(sija[who])+'.'; + Profile[profileorder[t1]].best4result:= + txtp(fourpts[who])+' ('+str1+')'; + end; + end; + + if (cupstyle=0) and (mcpisteet[who] >= Profile[profileorder[Numpl+1-who]].bestpoints) then + begin + Profile[profileorder[Numpl+1-who]].bestpoints:=mcpisteet[who]; + str1:='-'; + if (final) then str1:=txt(sija[who])+'.'; + Profile[profileorder[Numpl+1-who]].bestresult:= + txt(mcpisteet[who])+' ('+str1+')'; + end; + + if (cupstyle=1) and (final) then + begin + LoadCustom(SetFile,sortby,hillorder,cuphills); + oldhi:=top[42]; + temp2:=sorthighs(4+sortby); + + if (temp2 = 1) and (SetFile<>'TEMP') then cscreen:=true; + + if (temp2 > 0) then WriteCustom(SetFile,sortby,HillOrder,CupHills); + end; + +(* + pts:=mcpisteet[who]; + if (sortby=1) then pts:=fourpts[who]; + + if (pts > temphi.score) then + begin + oldhi:=temphi; + temphi.name:=nimet[who]; + temphi.pos:=sija[who]; + temphi.score:=pts; + temphi.time:=dayandtime(Today,Now); + WriteCustomRecord(SetFile,temphi); + cscreen:=true; + end; +*) + + end; + + if (not cupslut) then + case cupstyle of + 0 : begin + if (osakilpailu=12) then sorthighs(2); + if (final) then sorthighs(0); + end; + 1 : if (cscreen) then NewCRecordScreen(SetFile,top[42],oldhi,sortby); + 2 : if (final) then sorthighs(2); + end; + +end; + + +procedure lista(vaihe:byte); + { oldvaiheet: 0 - WCquali 1 - WC, 2 - 4hills } + { newvaiheet: 0 - WCquali, 1 - WCk1, 2 - WCk2, 3 - 4H, 4 - MClista } + { monta : kaikki, qualit, qualit, >4pts >MCpist } + +var t1,t2, pts : longint; + ldiff, valiviiva, leave : boolean; + who, prev, next, temp, temp2 : integer; + monta : byte; + shown, needtoshow : integer; + str1,extra : string; + oknow : boolean; + templuett : array[0..NumPl+1] of byte; + +function shouldishow(player:integer):byte; +var outbyte : byte; + who2 : integer; + pts2 : longint; + +begin + outbyte:=0; { ei t„t„ pit„isi n„ytt„„, ei oo oma } + who2:=templuett[player]; + + case vaihe of + 0,1,2 : pts2:=pisteet[who2]; + 3 : pts2:=fourpts[who2]; + 4 : pts2:=mcpisteet[who2]; + end; + + if (who2 > NumPl-pmaara) Then { oma j„tk„ } + case vaihe of + 0 : outbyte:=1; + 1,2 : if (qual[who2]>0) then outbyte:=1; + 3,4 : if (pts2>0) then outbyte:=1; + end; { case } + + shouldishow:=outbyte; + +end; + + begin + + needtoshow:=0; { monta omaa j„tk„„ on edes tarkoitus n„ytt„„ } + + for temp:=0 to NumPl+1 do templuett[temp]:=0; + + for temp:=1 to NumPl do { t„„ll„ k„ytet„„n templuettia } + if (vaihe=4) then templuett[temp]:=mcluett[temp] + else templuett[temp]:=luett[temp]; + + for temp:=1 to NumPl do inc(needtoshow,shouldishow(temp)); + + temp:=0; + + case vaihe of + 1,2 : temp:=1; + 3 : temp:=2; + 4 : temp:=3; + end; + + ldiff:=diff; + if (vaihe=4) then ldiff:=diffwc; + + resetlist(pmaara, NumPl, temp, donewheader(vaihe), InvBack); + if (compactlist) then compactsign; + + leave:=false; + valiviiva:=false; { ei ole sit„ piirretty viel„ } + + temp:=1; + shown:=0; + + repeat + + who:=templuett[temp]; + prev:=templuett[temp-1]; + next:=templuett[temp+1]; + + extra:='X'; { ett„ extra[1] on jotain j„rkev„„ } + + temp2:=0; + + oknow:=false; + + if (compactlist) then { compakti tuloslista. } + repeat + + who:=templuett[temp]; + prev:=templuett[temp-1]; + next:=templuett[temp+1]; + +(* + if (sija[who]>10) and (sija[prev]<=10) and (shown10) then oknow:=true; + + if (shown=needtoshow) and (sija[next]>10) then { kaikki omat n„ytetty ja seuraava ei kuulu en„„ t„nne } + begin + oknow:=true; + extra:='L'; + end; + + if (not oknow) then inc(temp); + + until (oknow); + + if (sija[who]>30) and (not compactlist) and + (sija[prev]<=30) and (vaihe=1) + then temp2:=entry(0,0,2,'- - -',0,0,0,'X'); { 1. kierros v„liviiva } + + if (temp2>=0) then + begin + + case vaihe of + 0,1,2 : begin t1:=pisteet[who]; t2:=pisteet[templuett[1]]; end; + 3 : begin t1:=fourpts[who]; t2:=fourpts[templuett[1]]; end; + 4 : begin t1:=mcpisteet[who]; t2:=mcpisteet[templuett[1]]; end; + end; + + pts:=t1; + + if (diff) and (temp>1) then pts:=t1-t2; + + if (vaihe=0) and (qual[who]>0) then + begin + extra:=extra+'Q'; + if (sija[who]>50) then extra:=extra+'W'; + end; + + if (vaihe<2) and (sija[who]<=30) then extra:=extra+'Q'; + + if (inj[who]>0) and (vaihe<3) then extra:=extra+'I'+txt(inj[who]-1); + + if (vaihe<3) and (thisisahillrecord = (kierros*1000)+who) + then extra:=extra+'R'; + + case vaihe of { ett„ tiedet„„n loppuiko tulostettavat } + 0 : if (temp>=NumPl) then extra:='L'+extra; + 1,2 : if (qual[next]=0) then extra:='L'+extra; + 3 : if (fourpts[next]=0) then extra:='L'+extra; + 4 : if (mcpisteet[next]=0) then extra:='L'+extra; + end; + + if (next=0) or (next>NumPl) then extra:='L'+extra; + + case vaihe of + 0 : temp:=entry(temp,sija[who],who,nimet[who],pts,Cstats[0,who],0,extra); + 1,2 : temp:=entry(temp,sija[who],who,nimet[who],pts,Cstats[1,who],Cstats[2,who],extra); + 3 : temp:=entry(temp,sija[who],who,nimet[who],pts,0,0,extra); + 4 : if (mcpisteet[who]>0) then temp:=entry(temp,sija[who],who,nimet[who],pts,0,0,extra); + end; + + + if (compactlist) and (not valiviiva) then + if (sija[next]>10) and (sija[who]<=10) then + begin + valiviiva:=true; + temp2:=entry(0,0,2,'...',0,0,0,'X'); { v„liviiva } + end; + end; + + if (temp<0) or (temp2<0) then leave:=true; + + until (leave); + +{ DrawScreen; } + + if (temp=-2) then cupslut:=true; + +{ cupslut:=waitforkey2(ch); } + +{$IFDEF REG} + if (not cupslut) and (cupstyle=0) and (ch<>#27) and (vaihe=4) and + ((LCT) or (osakilpailu=NumWCHills)) then showstats; +{$ENDIF} + + end; + + +procedure jlista(num:integer); { num - monesko hypp„„j„ } +var str1 : string; + temp, who, pts : integer; + extra : string; + ldiff, leave : boolean; + begin + + temp:=5; + ldiff:=diff; + str1:=lstr(81)+' '+txt(osakilpailu)+' '+lstr(8)+' 6 - R '+txt(kierros)+' - '+lstr(88)+' '+txt(num); + + if (num=0) then { cuplista } + begin + temp:=6; + ldiff:=diffwc; + str1:=lstr(91)+' '+txt(osakilpailu)+' '+lstr(8)+' 6'; + if (osakilpailu=6) then str1:=lstr(92); + end; + + ResetList(jmaara,NumTeams,temp,str1,InvBack); + + leave:=false; + + temp:=1; + + repeat + + who:=luett[temp]; + if (num=0) then who:=mcluett[temp]; + + extra:='X'; + if (temp=15) then extra:='L'; + if (num=0) then + begin + if (mcpisteet[mcluett[temp+1]] = 0) then extra:='L'; + Stats[NumTeams,osakilpailu].WCPos:=sija[NumTeams]; { ?? } + Stats[NumTeams-1,osakilpailu].WCPos:=sija[NumTeams]; + end; + + if (who > 15-jmaara) Then + begin + sija[0]:=sija[who]; + if (num=0) then Stats[15-who,osakilpailu].WCPos:=sija[who] + else + begin + Stats[(num+(15-who)*4),osakilpailu].RoundLen[kierros]:=sija[who]; + Stats[15-who,osakilpailu].CompPos:=sija[who]; + end; + end; + + pts:=pisteet[who]; + if (num=0) then pts:=mcpisteet[who]; + + if (ldiff) and (temp>1) then + begin + if (num=0) then pts:=pts-mcpisteet[mcluett[1]] + else pts:=pts-pisteet[luett[1]]; + end; + + temp:=entry(temp,sija[who],who,jnimet[who],pts,0,0,extra); + + if (temp<0) then leave:=true; + + until (leave); + + if (temp=-2) then cupslut:=true; + + if (num=0) then + begin +{$IFDEF REG} + if (ch='s') or (ch='S') or (LCT) then + if (not cupslut) then showstats; +{$ENDIF} + if (osakilpailu=6) then sorthighs(1); + end; + + end; + + +procedure jarjestys(fromarray,toarray,num:byte); + { from: 0 - MCpist, 1 - fourpts, 2 - pisteet } + { to: 0 - mcluett, 1 - luett } + +var score1,score2 : longint; + t1,t2,t3 : integer; + templuett : array[0..NumPl+1] of byte; + +begin + + for t1:=1 to NumPl+1 do { kaikki nolliin } + begin + templuett[t1]:=0; + sija[t1]:=0; + end; + + for t1:=1 to Num do { Jokainen hypp„„j„ k„yd„„n l„pi } + begin + t2:=1; + repeat { Verrataan jokaiseen } + + case fromarray of + 0 : begin score1:=mcpisteet[t1]; score2:=mcpisteet[templuett[t2]]; end; + 1 : begin score1:=fourpts[t1]; score2:=fourpts[templuett[t2]]; end; + 2 : begin score1:=pisteet[t1]; score2:=pisteet[templuett[t2]]; end; + end; + + if (score1 > score2) then + begin + for t3:=Num downto t2 do + templuett[t3]:=templuett[t3-1]; + + templuett[t2]:=t1; + t2:=100; + end else + if (t2=Num) then templuett[t1]:=t1; + + inc(t2); + + until (t2>Num); + + end; + + for t1:=1 to Num do { k„„nteistaulukko eli sija[pelaaja]? } + sija[templuett[t1]]:=t1; + + for t1:=2 to Num do { tasapiste-sijoittelija } + begin + case fromarray of + 0 : begin score1:=mcpisteet[templuett[t1]]; score2:=mcpisteet[templuett[t1-1]]; end; + 1 : begin score1:=fourpts[templuett[t1]]; score2:=fourpts[templuett[t1-1]]; end; + 2 : begin score1:=pisteet[templuett[t1]]; score2:=pisteet[templuett[t1-1]]; end; + end; + + if (score1=score2) then sija[templuett[t1]]:=sija[templuett[t1-1]]; + + end; + + case toarray of + 0 : for t1:=1 to Num do mcluett[t1]:=templuett[t1]; + 1 : for t1:=1 to Num do luett[t1]:=templuett[t1]; + end; + +end; + + +procedure kothjarj; +var t1,t2,t3 : integer; + players, score1, score2 : integer; +begin + + players:=kothmaara+pmaara; + + for t1:=1 to players do { Jokainen hypp„„j„ k„yd„„n l„pi } + begin + t2:=1; + repeat { Verrataan jokaiseen } + + score1:=pisteet[mcluett[t1]]; score2:=pisteet[luett[t2]]; + + if (mcpisteet[mcluett[t1]]>0) then { pelaaja on jo laulukuorossa } + score1:=-mcpisteet[mcluett[t1]]*100; + + if (mcpisteet[luett[t2]]>0) then { pelaaja on jo laulukuorossa } + score2:=-mcpisteet[luett[t2]]*100; + + if (score1 > score2) then + begin + for t3:=players downto t2 do + luett[t3]:=luett[t3-1]; + + luett[t2]:=mcluett[t1]; + t2:=100; + end else + if (t2=players) then luett[t1]:=mcluett[t1]; + + inc(t2); + + until (t2>players); + + end; + +end; + + +procedure jcupluettelo; +var loop1 : integer; + begin + + for loop1:=1 to NumTeams do + if (sija[loop1]<9) then inc(mcpisteet[loop1],Teampoints[sija[loop1]]); + + jarjestys(0,0,NumTeams); + + jlista(0); + + end; + + +procedure kothlista; +var temp, temp2 : integer; + who,players : integer; + leave : boolean; + + extra,str1 : string; + +begin + +{ fillline(14,'"'); } + + kothjarj; + + players:=kothmaara+pmaara; + + for temp:=1 to players-1 do { tasapisteiss„ arvotaan } + begin + if (pisteet[luett[temp]] = pisteet[luett[temp+1]]) and (random(2)=0) then + if (mcpisteet[luett[temp]]=0) and (mcpisteet[luett[temp+1]]=0) then + begin +{ beep(2); } + temp2:=luett[temp]; + luett[temp]:=luett[temp+1]; + luett[temp+1]:=temp2; + end; + end; + + temp:=players+1-mcpisteet[0]; + + mcpisteet[luett[temp]]:=temp; + + for temp:=1 to NumPl+1 do luett[temp]:=0; + + kothjarj; + +{ for a:=1 to 50 do pisteet[a]:=1000; } + + str1:=' '+lstr(95); + + if (players-mcpisteet[0]=1) then str1:='!'; + + resetlist(pmaara,NumPl,4,lstr(31)+str1, InvBack); + + temp:=1; + + repeat + +{ DrawScreen; + ch:=readkey; } + + temp2:=0; + extra:='X'; + + if (temp = players+1-mcpisteet[0]) then + begin + str1:=lrstr(101,105); + + temp2:=entry(0,0,3,str1,0,0,0,'X'); + +{ drawscreen; readkey; } + end; + + if (temp2>=0) then + begin + + if (temp>=players) then extra:='L'; { vikaa vied„„n } + + if ((temp=1) and (players-mcpisteet[0]=1)) then + extra:=extra+'K'; { is KING OF THE HILL } + + who:=luett[temp]; + + temp:=entry(temp,temp,who,nimet[who],pisteet[who],Cstats[1,who],Cstats[2,who],extra); + + leave:=false; + + end; + + if (temp<0) or (temp2<0) then leave:=true; + + until (leave); + +{ DrawScreen; } + + if (temp=-2) then cupslut:=true; + + if (players-mcpisteet[0]=1) and (luett[1] > NumPl-pmaara) and + (kothpack>0) and (not cupslut) then + begin { completion! } + inc(top[35+kothpack].score); + top[35+kothpack].name:=nimet[luett[1]]; + top[35+kothpack].time:=dayandtime(Today, Now); + + temp2:=Profile[profileorder[Numpl+1-luett[1]]].kothlevel; + + if (temp2=0) or (kothpack < temp2) then + Profile[profileorder[Numpl+1-luett[1]]].kothlevel:=kothpack; { profilen kothlevel } + + NewScreen(1,2); + + dokothrecords(kothpack); + + Waitforkey3(305,6,ch); + + end; + +end; + +procedure showpairs(phase:byte); { 0-esittely, 1-tuloksien kanssa } +var temp,temp2,who : integer; + extra : string; + + procedure drawstuff(column,row,item:byte); + var xx,yy,plus:integer; + extra : string[5]; + begin + xx:=145+(column*30); + yy:=17+(row*7); + plus:=fontlen(nsh(nimet[who],100))+5; + if (plus>105) then plus:=105; + + extra:=''; + if (qual[who]=1) then extra:='Q'; + if (qual[who]=2) then extra:='LL'; + + case item of + 0 : ewritefont(xx,yy,nsh(nimet[who],100)); + 1 : writefont(xx,yy,nsh(nimet[who],100)); + 2 : ewritefont(xx-plus,yy,'('+txt(qual[who])+')'); + 3 : writefont(xx+plus,yy,'('+txt(qual[who])+')'); +{ 4 : ewritefont(xx-plus,yy,txtp(pisteet[who])); + 5 : writefont(xx+plus,yy,txtp(pisteet[who])); } + 4 : ewritefont(40,yy,txtp(pisteet[who])); + 5 : ewritefont(303,yy,txtp(pisteet[who])); + + 6 : ewritefont(12,yy,extra); + 7 : writefont(308,yy,extra); + + 10 : writefont(154,yy,'vs.'); + + end; + + end; + +begin + + newscreen(1,0); + fontcolor(240); + writefont(30,6,lstr(94)); + fontcolor(241); + + for temp:=25 downto 1 do + for temp2:=0 to 1 do + begin + who:=luett[51-temp]; + if (temp2=1) then who:=luett[temp]; + + if (kierros=1) and (who>Numpl-pmaara) then Stats[NumPl+1-who,osakilpailu].Round1Pos:=sija[who]; + + fontcolor(241); + drawstuff(temp2,26-temp,10); { vs. } +{ if (who>Numpl-pmaara) then fontcolor(240); } + if (phase=1) then case qual[who] of + 1 : fontcolor(251); { tummankeltainen } + 2 : fontcolor(252); + end; + + if (who>Numpl-pmaara) then fontcolor(240); + + drawstuff(temp2,26-temp,temp2); { nimi ruutuun } + if (phase=1) then + begin +{ if (who>Numpl-pmaara) and (qual[who]>0) then fontcolor(246); } + drawstuff(temp2,26-temp,temp2+4); + drawstuff(temp2,26-temp,temp2+6); + end else drawstuff(temp2,26-temp,temp2+2); { qual } + + end; + + cupslut:=Waitforkey3(305,6,ch); + +end; + + + + + +procedure jumpalku; +var temp : integer; + begin +{ maki:=osakilpailu mod mmaara; } + +{ nytmaki:=osakilpailu; } { t„m„ tehd„„n paikallisesti ennen jumpalkua } + +{ kr:=kri[nytmaki]; } { t„m„ luetaan LoadInfon avulla } + + LoadInfo(nytmaki,ActHill); + +(* + if jcup then mctil[0,osakilpailu,1]:=maki; { Miss„ m„ess„ hyp„ttiiin... } + *) + + for temp:=1 to NumPl+1 do + begin + pisteet[temp]:=0; + luett[temp]:=0; + mcluett[temp]:=0; + cstats[0,temp]:=0; + cstats[1,temp]:=0; + cstats[2,temp]:=0; + end; + + ThisIsAHillRecord:=0; + + end; + + + + +function selecthill(phase:byte):byte; { 0 - train, 1 - koth, 2 - morehills, 3 - morehills KOTH } + { uusi: 0 - train, 1 - koth } +var temp, gothill : integer; + hill : integer; + str1 : string; + items : integer; + leave : boolean; + start : integer; + +begin + + start:=0; + + repeat + + NewScreen(2,0); + +{ if (start=0) then NewScreen(2,0) + else NewScreen(2,5); } + + fontcolor(240); + + writefont(30,31,lstr(151)); + writefont(30,41,lstr(152)); + writefont(30,51,lstr(153)); + + items:=NumExtraHills+NumWCHills-start; + if (items>20) then items:=20; + + for temp:=1 to items do + begin + hill:=temp+start; + + fontcolor(246); + ewritefont(130,(temp-1)*8+10,txt(temp)+'.'); + + fontcolor(247); + writefont(145+fontlen(hillname(hill)),(temp-1)*8+10,'K'+txt(hillkr(hill))); + fontcolor(240); + writefont(140,(temp-1)*8+10,hillname(hill)); + end; + + if (NumExtraHills>0) then { * more hills * } + begin + inc(temp); inc(items); + fontcolor(247); + writefont(140,(temp-1)*8+10,lstr(156)); + fontcolor(240); + end; + + inc(temp,2); + ewritefont(130,(temp-1)*8+10,'0.'); + str1:=lstr(154); + if (phase=1) then str1:=lstr(155); + writefont(140,(temp-1)*8+10,str1); + + DrawScreen; + + gothill:=MakeMenu(110,11,170,8,items,1,243,0,0); + + leave:=true; + + if (gothill=items) and (NumExtraHills>0) then + begin + inc(start,20); + if (start>=NumExtraHills+NumWCHills) then start:=0; + leave:=false; + end; + + until (leave); + + temp:=gothill+start; + + if (gothill<=0) then temp:=gothill; + + selecthill:=temp; + +end; + + + +procedure training; +var temp : integer; + +begin + + osakilpailu:=0; + kierros:=-10; + treeni:=true; + cupslut:=false; + ch:=#1; + startgate:=15; + + repeat + + eka:=true; + + nytmaki:=selecthill(0); + + if (nytmaki=0) then cupslut:=true; + + if (nytmaki>0) then jumpalku; + + { kr:=kri[nytmaki]; } + if (ch<>#27) and (nytmaki>0) then + repeat + Tuuli.Alusta(windplace); + + hyppy(1,NumPl+1,0); + + eka:=false; + until (ch=#27) or (cupslut); + + ch:=#1; + + until (cupslut); + + treeni:=false; + startgate:=0; { varmuuden vuoksi } + +end; + + + + +procedure getkoth; +var temp : integer; +begin + + case kothpack of + 1 : begin + kothmaara:=20; + for temp:=1 to kothmaara do kothpel[temp]:=temp; + kothwind:=false; + kothrounds:=2; + kothmaki:=0; + end; + 2 : begin + kothmaara:=14; + for temp:=1 to kothmaara do kothpel[temp]:=temp*3-1; + kothwind:=true; + kothrounds:=1; + kothmaki:=0; + end; + 3 : begin + kothmaara:=10; + for temp:=1 to kothmaara do kothpel[temp]:=temp*4-1; + kothwind:=false; + kothrounds:=2; + kothmaki:=0; + end; + 4 : begin + kothmaara:=8; + for temp:=1 to kothmaara do kothpel[temp]:=temp*5+1; + kothwind:=true; + kothrounds:=1; + kothmaki:=0; + end; + 5 : begin + kothmaara:=7; + for temp:=1 to kothmaara do kothpel[temp]:=temp*6+13; + kothwind:=false; + kothrounds:=2; + kothmaki:=0; + end; + 6 : begin + kothmaara:=6; + for temp:=1 to kothmaara do kothpel[temp]:=temp*7+15; + kothwind:=true; + kothrounds:=1; + kothmaki:=0; + end; + +{ 7 : begin + kothmaara:=random(9)+1; + for temp:=1 to 9 do + begin + kothpel[temp]:=random(60)+1; + for b:=1 to a-1 do + if kothpel[temp]=kothpel[b] then dec(a); + end; + kothwind:=boolean(random(2)); + koth1r:=boolean(random(2)); + end; } + end; { case } +end; + +procedure startkoth; +var temp, index : integer; + realindex : integer; + str1 : string; +begin + + koth:=true; + cupslut:=false; + startgate:=0; + + if (kothmaki=0) then nytmaki:=random(NumWCHills)+1 else nytmaki:=kothmaki; + + if (nytmaki>0) then jumpalku; + + if (kothwind) then Tuuli.Alusta(windplace) else tuuli.voim:=0; + +{ if (not cupslut) and (preview1) then preview(nytmaki); } + + for temp:=1 to kothmaara do + mcluett[temp]:=kothpel[temp]; + + for temp:=1 to pmaara do + mcluett[kothmaara+temp]:=NumPl+1-temp; + + for temp:=1 to NumPl do + mcpisteet[temp]:=0; + + eka:=true; + + if (not cupslut) then + for mcpisteet[0]:=1 to kothmaara+pmaara-1 do { kisaluuppi } + begin + for temp:=1 to kothmaara+pmaara do + if (mcpisteet[mcluett[temp]]=0) then pisteet[mcluett[temp]]:=0; + + for temp:=1 to NumPl do + luett[temp]:=0; + +{ eka:=true; } { kaivanvertanen„st„ } + kierros:=1; + realindex:=0; { monta „ij„„ oikeasti hyp„nnyt } + + for index:=1 to kothmaara+pmaara do + if (mcpisteet[mcluett[index]]=0) then + if (not cupslut) then + begin + inc(realindex); + hyppy(index,mcluett[index],realindex); + eka:=false; + end; + +{ eka:=true; } { TSEKKAA TŽMŽ!!! } + + realindex:=0; + + if (kothrounds=2) then + begin + kierros:=2; + + for index:=1 to kothmaara+pmaara do + if (mcpisteet[mcluett[index]]=0) then + if (not cupslut) then + begin + inc(realindex); + hyppy(index,mcluett[index],realindex); + eka:=false; + end; + + end; + + if (not cupslut) then kothlista; + +{ textcolor(1); + for a:=1 to kothmaara+pmaara do + writeln(a,'. ',mcpisteet[mcluett[a]],' ',nimet[mcluett[a]],mcluett[a],' ',pisteet[a]); + readln; } + + end; + +{ readln; } + + koth:=false; + +end; + + + +procedure choosekoth; +var temp, x, y : integer; +{ ch2 : char; } + +begin + kothmaara:=0; + + fillbox(170,0,319,199,243); + fillarea(170,0,319,199,63); + + fontcolor(240); + writefont(180,2,lstr(138)); + + fontcolor(241); + writefont(180,9,lstr(139)); + writefont(180,16,lstr(140)); + + fontcolor(247); + writefont(180,24,lstr(141)); + writefont(295,24,lstr(142)); + + repeat + + inc(kothmaara); + + repeat + + y:=kothmaara*8+25; + + fillbox(178,y-2,315,y+8,243); + fontcolor(240); + writefont(180,y,nsh(nimet[kothpel[kothmaara]],110)); + ewritefont(310,y,'#'+txt(kothpel[kothmaara])); + + DrawScreen; + + readkbd(ch,ch2); + + if (ch=#13) then { tsekataan ettei sit„ pelaajaa ole jo } + begin + for temp:=1 to kothmaara-1 do + if kothpel[temp]=kothpel[kothmaara] then + begin + if (kothpel[kothmaara]1) then dec(kothpel[kothmaara]); + if ((ch2=#80) or (ch2=#77)) and (kothpel[kothmaara]10) then dec(kothpel[kothmaara],10); + if (ch2=#81) and (kothpel[kothmaara]0) then + for temp:=1 to kothmaara do + begin + writefont(180,20+temp*8,nsh(nimet[kothpel[temp]],110)+' #'+txt(kothpel[temp])); + + end else writefont(180,30,lstr(9)); + + x:=10; y:=10; + + fontcolor(240); + + writefont(180,10,lstr(120)); + + + col1:=240; col2:=246; + if (kothpack>0) then begin col1:=241; col2:=241; end; + + writefont(x,y,'1 - '+lstr(121)); inc(y,10); + + writefont(x,y,'2 - '+lstr(122)); inc(y,10); + + fontcolor(col1); + writefont(x,y,'3 - '+lstr(123)); inc(y,10); + + writefont(x,y,'4 - '+lstr(124)); + fontcolor(col2); writefont(x+70,y,nsh(hillname(kothmaki),80)); inc(y,10); + fontcolor(col1); + + writefont(x,y,'5 - '+lstr(125)); + str1:=lstr(7); if (kothwind) then str1:=lstr(6); + fontcolor(col2); writefont(x+70,y,str1); inc(y,10); + + fontcolor(col1); + writefont(x,y,'6 - '+lstr(126)); + fontcolor(col2); writefont(x+70,y,lstr(kothrounds)); inc(y,20); + + fontcolor(240); + writefont(x,y,'0 - '+lstr(127)); + + kothchallenge(x,kothpack); + + DrawScreen; + + index:=MakeMenu(10,10,160,10,6,1,245,0,3); + + case index of + 1 : startkoth; + 2 : begin { select challenge } + kothchallenge(x,255); { kaikki esiin } + DrawScreen; + + temp:=kothpack; + kothpack:=MakeMenu(10,121,160,8,6,1,244,0,254); +{$IFNDEF REG} + if ((kothpack<1) or (kothpack>6)) then kothpack:=temp; +{$ENDIF} + + getkoth; + end; +{$IFDEF REG} + 3 : begin + kothpack:=0; + choosekoth; + end; { else if (beeppi) then beep(2); } + 4 : begin + kothpack:=0; + kothmaki:=selecthill(1); + end; { else if (beeppi) then beep(2); } + 5 : begin + kothpack:=0; + kothwind:=not kothwind; + end; { else if (beeppi) then beep(2); } + 6 : begin + kothpack:=0; + case kothrounds of + 1 : kothrounds:=2; + 2 : kothrounds:=1; + end; + end;{ else if (beeppi) then beep(2);} +{$ENDIF} + + end; { case } + + until (index=0){ or (index=1)}; + +{ if (index=1) then startkoth; } + + WriteConfig; { kirjoitetaan muutokset levylle } + +end; + + + +procedure getteam(num:byte); { 0 - tekee ekan, 1 - tokan... } +var xx,yy, temp : integer; +begin + + xx:=30; + + if (num=1) then xx:=160; + +{ FontColor(240); } + +{ Writefont(xx,38,'TEAM'+txt(num+1)); } +{ Writefont(xx,0,jnimet[15-num]); } + + FontColor(246); + + for temp:=1 to 4 do + begin + Writefont(xx+13,(temp-1)*10+56,Nimet[NumPl+1-(num*4)-temp]); + end; + + FontColor(240); + + Writefont(xx,30,lstr(113)+' '+txt(num+1)+':'); +{ FillBox(40,65,200,81,243); } + +{ Fontcolor(240); } + + DrawScreen; + + jnimet[15-num]:=GetStr(xx,42,120,jnimet[15-num],242); + + FillBox(xx-10,30,xx+124,54,243); + FillArea(xx-10,30,xx+124,54,63); + + FontColor(241); + + WriteFont(xx,30,lstr(114)+' '+txt(num+1)+':'); + + fontcolor(240); + WriteFont(xx,42,Jnimet[15-num]); + +end; + +procedure teamsready; +var temp, temp2 : integer; +begin + + NewScreen(1,1); + + FontColor(240); + Writefont(30,6,lstr(111)); + +{ FontColor(247); } + + WriteFont(30,110,lstr(112)); + + for temp:=1 to 40 do + HillOrder[temp]:=temp; + + HillOrder[1]:=random(NumWCHills)+1; + + for temp:=2 to 6 do + begin + HillOrder[temp]:=random(NumWCHills)+1; + + for temp2:=1 to temp-1 do + if (HillOrder[temp] = HillOrder[temp2]) then dec(temp); + + end; + + FontColor(246); + + for temp:=1 to 6 do + WriteFont(30,(temp*10)+114,txt(temp)+'. '+hillname(HillOrder[temp])); + +{ Writefont(30,36,'THE TEAM LINEUPS ARE:'); } + + GetTeam(0); + + if (jmaara>1) then GetTeam(1); + +{ ShowTeam(0); + + if (jmaara>1) then ShowTeam(1); + + FontColor(240); } + + for temp:=1 to 4 do + TeamLineup[14*4+temp]:=NumPl+1-temp; + + if (jmaara>1) then + for temp:=1 to 4 do + TeamLineup[13*4+temp]:=NumPl-3-temp; + + DrawScreen; + + CupSlut:=WaitForKey3(305,180,ch); + +{ ReadKey; } + +end; + + + + +procedure startteam; +var temp, temp2, index, team : integer; + teamorder : array[1..15] of integer; + + procedure ShowTeams; + var x,y, t1,t2,t3 : integer; + begin + newscreen(1,1); + writefont(30,6,lstr(111)); + x:=5; + y:=24; + + for t1:=15 downto 1 do + begin + team:=teamorder[t1]; + fontcolor(240); + writefont(x,y,nsh(jnimet[team],95)); + + if (team > 15-jmaara) then fontcolor(246) + else fontcolor(241); + + for t2:=1 to 4 do + begin + t3:=teamlineup[(team-1)*4 + t2]; + writefont(x+4,y+1+(t2*6),nsh(nimet[t3],90)); + end; + + inc(x,102); + if (x>240) then begin x:=5; inc(y,35); end; + drawscreen; + + end; + + + cupslut:=waitforkey3(305,6,ch); + + end; + + + procedure swap(var i1,i2:integer); + var temp : integer; + begin + temp:=i1; + i1:=i2; + i2:=temp; + end; + + +begin + + osakilpailu:=0; + startgate:=0; + + for temp:=1 to 15 do begin mcpisteet[temp]:=0; teamorder[temp]:=16-temp; end; + + for temp2:=1 to 3 do + for temp:=1 to 14 do + if (random(2)=0) then swap(teamorder[temp],teamorder[temp+1]); + + ResetStats; + + ShowTeams; + + repeat + + Tuuli.Alusta(windplace); + + inc(osakilpailu); + + nytmaki:=HillOrder[osakilpailu]; + + jumpalku; + +{ Stats[0,osakilpailu].Reason[1]:=nytmaki; } + +{ if (preview1) then preview(nytmaki); } + + kierros:=1; + + { team:=1; } + + eka:=true; + + for index:=1 to 4 do { jumpers 1..4 } + begin + + for temp:=1 to 15 do + luett[temp]:=0; + +{ eka:=true; } + + { if (not cupslut) then jmuidenhypyt(index); } + + for temp2:=1 to NumTeams do + begin + + team:=teamorder[temp2]; + + temp:=teamlineup[(team-1)*4 + index]; + +{ temp:=round((5-index)*2.5+(team*1.5)-3); + if (team > NumTeams-jmaara) then temp:=NumPl+1-(15-team)*4-index; } + + if (not cupslut) then hyppy(index, temp, team); + + eka:=false; + end; + + jarjestys(2,1,NumTeams); + if (not cupslut) then jlista(index); + + end; + + inc(kierros); + +{ eka:=true; } { hullu! } + + if (ch<>'S') and (ch<>'s') then { 2. kierros } + for index:=1 to 4 do + begin + + for temp:=1 to 15 do + luett[temp]:=0; + +{ eka:=true; } { TARKASTA! (OK) } + + for temp2:=1 to NumTeams do + begin + + team:=teamorder[temp2]; + temp:=teamlineup[(team-1)*4 + index]; + +{ temp:=round((5-index)*2.5+(team*1.5)-3); + if (team > NumTeams-jmaara) then temp:=NumPl+1-(15-team)*4-index; } + + if (not cupslut) then hyppy(index, temp, team); + eka:=false; + + end; + + jarjestys(2,1,NumTeams); + if (not cupslut) then jlista(index); + end; + +{ eka:=true; } + + if (ch='S') or (ch='s') then { skippaus (?) } + begin + for temp:=1 to 15 do + luett[temp]:=0; + jarjestys(2,1,NumTeams); + jlista(index); + end; + + if (not cupslut) then jcupluettelo; + + until (cupslut) or (osakilpailu>=6); + + { end; } + +end; + + + +procedure teamcup; +begin + jcup:=true; +{ textbackground(1); + clrscr; } + cupslut:=false; + startgate:=0; + +{ putsaa; } + if (pmaara=4) or (pmaara=8) then { Ehk„ v„h„n turha } + begin + LoadNames(namenumber,jmaara,TeamLineup,false); + + teamsready; + + if (not cupslut) then startteam; + + end + else + begin + + if (beeppi) then beep(1); + + teamwarning; + + end; + + jcup:=false; + + LoadNames(namenumber,jmaara,TeamLineup,true); + +end; + + + + +procedure cup; { cupstyle: 0 - SJ3 WC, 1 - Custom WC, 2 - Just 4Hills } +var temp,temp2,index : integer; + sortby, skipquali : byte; { sortby: 0 - WC, 1 - t_points } + fourhills, dokosystem, skip : boolean; + +begin + + wcup:=true; + + osakilpailu:=0; + startgate:=0; + + cupslut:=false; +{ team:=1; } + + for temp:=0 to NumPl+1 do + begin + mcpisteet[temp]:=0; + fourpts[temp]:=0; + inj[temp]:=0; + end; + + ResetStats; + + case cupstyle of + 0 : begin + for temp:=0 to 40 do + HillOrder[temp]:=temp; + CupHills:=NumWCHills; + sortby:=0; + end; + 1 : begin + SelectCustomHills(sortby,CupHills,HillOrder,SetFile); + end; + 2 : begin + for temp:=0 to 4 do + HillOrder[temp]:=temp+8; + CupHills:=4; + sortby:=1; + end; + end; + + if (CupHills=0) then CupSlut:=true; + + ch:=#1; + + repeat + + inc(osakilpailu); + + fourhills:=false; dokosystem:=false; { saadaan yhteen muuttujaan se } + if (cupstyle=2) or ((cupstyle=0) and (osakilpailu>8) and (osakilpailu<13)) then fourhills:=true; + if (fourhills) and (kosystem) then dokosystem:=true; + + nytmaki:=HillOrder[osakilpailu]; + + Tuuli.Alusta(windplace); + jumpalku; + + kierros:=0; + + for temp:=1 to NumPl do { uusi skaba alkaa, v„hennet„„n inj } + if (inj[temp]>0) then dec(inj[temp]); + + jarjestys(sortby,0,Numpl); { tehd„„n eka j„rkk„ mcluettiin } + + for temp:=0 to NumPl do qual[temp]:=0; + + if (osakilpailu>1) then + for temp:=1 to NumPl do { suoraan MC pisteill„ sis„„n } + if (sija[temp]<11) and (inj[temp]=0) then + begin { and (inj[temp]<2 } + qual[temp]:=2; + inc(qual[0]); + end; + + eka:=true; + + { TRAINING ROUNDS (kierros-1,-2,-3) } + + if (not CupSlut) and (trainrounds>0) then + + for temp:=1 to trainrounds do + begin + + kierros:=-temp; + + for index:=NumPl downto 1 do + if (inj[mcluett[index]]=0) then { onko loukkaantunut? } + if (not cupslut) then + begin + hyppy(index,mcluett[index],0); + eka:=false; + end; + + end; + if not (cupstyle=1) then { v3.13 - customissa skipataan quali } + begin + + kierros:=0; + + { QUAL ROUND kierros:=0; } + + if (not CupSlut) then { NEW! } + for index:=NumPl downto 1 do + begin + skip:=false; + if (mcluett[index] > NumPl-pmaara) then + begin + skipquali:=Profile[profileorder[Numpl+1-mcluett[index]]].skipquali; + if (skipquali=2) or ((not fourhills) and (skipquali=1)) then skip:=true; + end; + + if (inj[mcluett[index]]=0) and (not cupslut) then + if not ((mcluett[index] > NumPl-pmaara) and (skip) and + (qual[mcluett[index]] > 0)) then { skipquali mahis } + begin + hyppy(index,mcluett[index],0); + eka:=false; + end; + end; + + jarjestys(2,1,Numpl); + + if (not cupslut) and (osakilpailu>1) then { ei eka kisa } + begin + temp2:=1; + + for temp:=1 to 50-qual[0] do { yleens„ 30 } + begin + while ((qual[luett[temp2]]>0) or (inj[luett[temp2]]<>0)) and (temp2 1 } + else + begin + for temp:=1 to NumPl do qual[temp]:=1; + end; + + for temp:=0 to NumPl do + pisteet[temp]:=0; + + for temp:=1 to NumPl do + if (qual[temp]=0) then pisteet[temp]:=-5555; { pistet„„n niille niin huonot pisteet ettei ne kummittele } + + kierros:=1; + + if (dokosystem) then { *** 1. KIERROS *** } + for temp:=25 downto 1 do + for temp2:=0 to 1 do + begin + index:=51-temp; + if (temp2=1) then index:=temp; + + if (inj[luett[index]]=0) and (not cupslut) then + begin + hyppy(index,luett[index],0); + eka:=false; + end; + + end else + for index:=NumPl downto 1 do + if (qual[mcluett[index]]>0) and (inj[mcluett[index]]=0) and (not cupslut) then + begin + hyppy(index,mcluett[index],0); + eka:=false; + end; + + if (not dokosystem) and (not cupslut) then { 1. kierroksen tulokset } + begin + jarjestys(2,1,NumPl); + updatestats(1); + lista(1); + end; + + for temp:=0 to NumPl do qual[temp]:=0; + + if (not dokosystem) then { tavallinen } + begin + for temp:=1 to NumPl do + if (sija[temp]<31) then qual[temp]:=1; { n„m„ ovat luettelon j„lkeen, ett„ siell„ tiedet„„n koska hypp„„j„t loppuu } + end else + begin { ko system } + for temp:=25 downto 1 do + if (pisteet[luett[temp]] >= pisteet[luett[51-temp]]) then + qual[luett[temp]]:=1 else qual[luett[51-temp]]:=1; + for temp:=1 to NumPl do + mcluett[temp]:=luett[temp]; { laitetaan talteen l„ht”j„rjestys } + + jarjestys(2,1,NumPl); { tehd„„n pisteist„ j„rkk„ } + temp2:=1; + for temp:=1 to 5 do { 5 lucky loseria } + begin + while (qual[luett[temp2]]<>0) and (temp20) and (not cupslut) then + begin + hyppy(index,luett[index],0); + eka:=false; + end; + + ch:=#1; { ettei hypyn keskeytt„minen sotke liikaa } +{ + for temp:=1 to pmaara do + if (sija[NumPl+1-temp]>30) then stats[temp,osakilpailu].Reason[2]:=4;} { Ei selvinnyt tokalle } + + eka:=true; + + if (cupstyle>0) or (fourhills) then + for temp:=1 to NumPl do { custom tai fourhills } + if (pisteet[temp]<>-5555) then inc(fourpts[temp],pisteet[temp]); + + if (not cupslut) then { 2.kierros tulokset } + begin + jarjestys(2,1,NumPl); + updatestats(1); + lista(2); + end; + + if (not cupslut) and (sortby=0) then { MC tulokset, jos niist„ kisataan } + begin + + for temp:=1 to NumPl do + if (sija[temp]<31) then inc(mcpisteet[temp],WCPoints[sija[temp]]); + + jarjestys(0,0,NumPl); + updatestats(0); + lista(4); + + end; + +{ for temp:=1 to NumPl do + if (inj[temp]>0) then dec(inj[temp]); } + + for temp:=0 to NumPl+1 do luett[temp]:=0; + + for temp:=1 to NumPl do if (pisteet[temp]=-5555) then pisteet[temp]:=0; + + if (not cupslut) and ((sortby=1) or (fourhills)) then { ja yhteispiste tulokset } + begin + jarjestys(1,1,NumPl); + updatestats(2); + lista(3); + end; + + updaterecords(sortby); { enn„tystauluja jos tarvis } + + until (osakilpailu=CupHills) or (Ch=#27) or (cupslut); + + mcpisteet[15]:=0; { ????? mik„ 15? } + + wcup:=false; + + { testing alleolevia! } + + WriteProfiles; + WriteRecords; + MakeSendMe; + +end; + + + + + +procedure CheckParam; +var str1 : string; +begin + + str1:=paramstr(1); + + case str1[2] of +{ 'x' : ex:=true; } +{ 't' : StartTest; } + 'r' : ResetHiscore(1); + 'z' : ResetHiscore(0); + 'c' : ResetConfig; + end; + +end; + + +procedure drawfullmain; +begin + drawmainmenu; + +{$IFDEF REG} + newregtext(regname,regnumber); +{$ELSE} + newunregtext; +{$ENDIF} + +end; + +procedure JumpMenu; +var x, y, num, temp, index : integer; + +begin + + index:=1; + + repeat + + MainMenuText(1,version); + + index:=MakeMenu(11,97,108,12,6,index,8,4,0); + + case (index) of + 1 : begin cupstyle:=0; cup; end; + 2 : begin cupstyle:=1; cup; end; + 3 : begin cupstyle:=2; cup; end; +{$IFDEF REG} + 4 : teamcup; +{$ENDIF} + 5 : newkingofthehill; + 6 : training; + end; + + if (index<>0) then drawfullmain; + + until (index=0); + +end; + + +procedure MainMenu; +var s : string; + temp,x,y : integer; + index : integer; + +begin + + AsetaMoodi($13); + FillBox(0,0,319,199,0); + + index:=1; + + if (languagenumber=255){ or (random(2)=0) } then + begin + WelcomeScreen(languagenumber); + Replays(true,version,gdetail); + end; + +{ TestAnims; + + Halt; } + + repeat + + drawfullmain; + + MainMenuText(0,version); + +{ index:=MakeMenu(30,69,110,10,8,index,243,0,6); } + + index:=MakeMenu(11,97,108,12,6,index,8,4,2); + + case index of + 1 : jumpmenu; + 2 : { signupplayers; } + begin + LoadNames(namenumber,jmaara,TeamLineup,false); + profiles; + if (pmaara=8) then jmaara:=2 else jmaara:=1; + jnimet[NumTeams-1]:='Team 2'; + LoadNames(namenumber,jmaara,TeamLineup,true); + end; + 3 : setupmenu; + 4 : showtops(0); + 5 : if (NumExtraHills>0) then showtops(1) + else showtops(2); + 6 : replays(false,version,gdetail); + +{ testanims; } + +{ 1 : begin justfourhills:=false; cup; end; + 2 : begin justfourhills:=true; cup; end; + 3 : teamcup; + 4 : newkingofthehill; + 5 : training; + 6 : signupplayers; + 7 : setupmenu; + 8 : showtops; } + end; { case } + + if (index=0) then index:=quitting(0); + + until (index=0); + +{ TestAnims; } + + AsetaMoodi($3); + +{ Textmode(CO80); } + +{ for a:=1 to 50 do write(index,' '); } + +{ readln; } + +end; + + + + +procedure alku; +var temp : integer; +begin + + writeln('SJ3 v',version,' by Ville K”n”nen 2011'); + + write('- Loading ANIM.SKI'); + LoadAnim('anim.ski'); + +(* + for temp:=1 to MaxOwnPl do + haalarit[temp]:=temp mod 7; { hyppypuvun v„ri kaikille erilainen } +*) + + eka:=true; + + jcup:=false; + wcup:=false; + koth:=false; + cupstyle:=0; + + CheckParam; + + write(', HISCORE.SKI'); + ReadRecords; + + write(', CONFIG.SKI'); + ReadConfig; + + write(', PLAYERS.SKI'); + LoadProfiles; + + writeln(', NAMES',namenumber,'.SKI'); + LoadNames(namenumber,jmaara,TeamLineup,true); + +{ write(', TEAMS',teamnumber,'.SKI'); + LoadTeams(teamnumber,jmaara,NumTeams,Jnimet); } + + write(' LANGBASE.SKI'); + if (languagenumber<>255) then LoadLanguage(languagenumber); + +{ + writeln('Kieli: ',lnames[1]); writeln('Kieli„: ',numlanguages); + for a:=1 to 15 do + writeln(lstr(temp)); + readln; +} + + CheckExtraHills; { lukee ylim. SJH:t ja kirjoittaa MOREHILL.SKI:n } + + write(', MOREHILL.SKI'); + LoadHillInfo; { mnimet[],kri[] ja NumExtraHills kuntoon } + + write(', Extra Hillrecords'); + if (NumExtraHills>0) then ReadExtras; + + Maki.Alusta; + +(* + SetFile:='TEMP'; { custom setin tiedosto } +*) + +{ LoadFonts; } +{ tuuli:=-70;} + +end; + +procedure loppu; +begin + + writeln('SJ3 v',version,' by Ville K”n”nen 2013'); + + GetNow(Now); + + write('- Writing HISCORE.SKI'); + WriteRecords; + + write(', CONFIG.SKI'); + WriteConfig; + + write(', PLAYERS.SKI'); + WriteProfiles; + + if (NumExtraHills>0) then + begin + write(', Extra Hillrecords'); + WriteExtras; + end; + + putsaa; + + MakeSendMe; + + write(', SENDME.TXT.'); + + textbackground(0); + clrscr; + + DoWindow(1,2,80,14,7); +{$IFDEF REG} + regendtext(regname,regnumber); +{$ELSE} + unregendtext; +{$ENDIF} + + lopputext(version,Start,Now); + + readkbd(ch,ch2); + +end; + + + + +begin { MAIN } + + randomize; + + HeapLimit:=0; { suositeltiin... } + + getdate(Today.Year,Today.Month,Today.Day,Today.DayofWeek); + getnow(start); + + version:='3.13'; + +(* ex:=true; { expert-mode } *) + +{$IFDEF REG} + reg:=true; { registered wai no } +{$ELSE} + reg:=false; +{$ENDIF} + +{ reg:=boolean(random(2)); } + +{ if (paramstr(1)='U') then reg:=false; } + +{ regname:='THIS IS A PRIVATE VERSION'; + regnumber:='1234A'; } + + DetectVGA; + + alku; + +{ + Init; + LoadSounds; + SetSamplingrate(13000); } + +{ boole:=StartSound(Sound[0],0,True); } + +{ ResetHiscore(1); } + + MainMenu; + +{ Valikko; } + + Loppu; + + +(* + CloseFont; { vapautetaan niiden k„ytt„m„ muisti } + CloseAnim; *) + +(* freemem(p,65528); *) + +{ StopSound(0); } + +{ ShutDown; + + FreeSounds; } + +{ for a:=232 to 239 do + begin + write(paletti[a,0]:4); + write(paletti[a,0]:4); + writeln(paletti[a,0]:4); + end; } + +end. diff --git a/SJ3GRAPH.PAS b/SJ3GRAPH.PAS new file mode 100644 index 0000000..5105591 --- /dev/null +++ b/SJ3GRAPH.PAS @@ -0,0 +1,591 @@ +unit SJ3Graph; { SJ3:n grafiikkarutiineja } + +interface + +procedure Waitraster; (* Wait vertical retrace *) +procedure WaitNotRetrace; (* Wait when it's not in vert. retr. *) +Procedure DrawScreen; +Procedure DrawHillScreen; +{procedure Splitscreen(korkeus:byte); } +procedure CloseGraph; +procedure DetectVGA; +procedure DrawAnim(x,y:integer;num:byte); +procedure LoadAnim(filename:string); +procedure PutPixel(x,y,c:integer); +{procedure PutGPixel(x,y:integer;c:byte); } +{function GetPixel(x,y:integer):byte; } +function GetPixel(x,y:word):byte; + +procedure EWriteFont(xx,yy:integer;s:string); +procedure WriteFont(xx,yy:integer;s:string); +function FontLen(s:string):word; +procedure fontcolor(col:byte); + +Procedure FillArea(x1,y1,x2,y2:word;thing:integer); + +procedure Fillbox(x,y,x2,y2:word;col:byte); +procedure Box(x,y,x2,y2:word;col:byte); +procedure Balk(st:byte); +procedure NewScreen(style,color:byte); +procedure alertbox; + +{ procedure angle(x,y,a,b,c:integer); } + +function NumofAnims:byte; + + +implementation + +uses Maki, SJ3PCX, SJ3Help; + +var Anim : array[0..200] of EPtr; + AnimP : array[0..200,0..1] of byte; + NumAnim : byte; + +function NumofAnims:byte; +begin + NumofAnims:=NumAnim; +end; + +procedure Waitraster; assembler; +asm + mov dx,03dah +@l1: + in al,dx + and al,08h + jnz @l1 +@l2: + in al,dx + and al,08h + jz @l2 +end; + + +procedure WaitNotRetrace; assembler; +asm + mov dx,03dah +@l: + in al,dx + and al,08h + jnz @l +end; + + +Procedure DrawScreen; +begin + WaitRaster; Maki.Paivitaruutu; +end; + +Procedure DrawHillScreen; +begin + + Maki.Tulosta; + + DrawScreen; + +end; + +procedure alertbox; +begin + + fillbox(59,79,261,131,242); + fillbox(60,80,260,130,244); + + fillarea(60,80,260,130,63); + +end; + +procedure NewScreen(style,color:byte); +begin + + Fillbox(0,0,319,199,0); + +{ DrawScreen; } + +{ LataaPCX('menu.pcx',320*200,0,0); + AsetaPaletti; + Move(mem[Graffa:0],mem[Video:0],64000); } + + + case style of +(* 0 : begin { main menu } + Fillbox(0,0,158,199,243); + Fillbox(160,0,319,118,244); + Fillbox(160,120,319,199,245); + end; *) + 1 : begin { highscores ym. } + Fillbox(0,0,319,18,245); + Fillbox(0,20,319,199,243); + end; +(* 2 : begin { valitsem„ki ym. } + Fillbox(0,0,78,199,244); + Fillbox(80,0,319,199,243); + end; *) + 2 : begin { valitsem„ki } +{ Fillbox(0,0,19,199,245); + Fillbox(21,0,298,199,243); + Fillbox(300,0,319,199,245); } + + Fillbox(0,0,10,199,245); + Fillbox(12,0,307,199,243); + Fillbox(309,0,319,199,245); + + end; + + 3 : begin { kingofthehill } + Fillbox(0,0,168,98,245); + Fillbox(0,100,168,199,244); + Fillbox(170,0,319,199,243); + end; + + 4 : begin { hiscore2 } + Fillbox(0,0,319,18,245); + Fillbox(0,20,319,118,243); + Fillbox(0,120,319,138,245); + Fillbox(0,140,319,199,243); + end; + + 5 : begin + FillBox(0,0,319,199,243); + end; + + 6 : begin { welcomescreen } + { FillBox(40,11,279,189,243); } + Fillbox(0,0,50,199,245); + Fillbox(52,0,267,199,243); + Fillbox(269,0,319,199,245); + + end; + + 7 : begin +{ Fillbox(0,0,88,199,243); + Fillbox(90,0,319,199,245); } + Fillbox(0,0,158,199,243); + Fillbox(160,0,319,199,244); + + end; + + end; + + FillArea(0,0,319,199,63); + + case style of { LOGO } + 0 : DrawAnim(20,14,61); + 1 : DrawAnim(5,2,62); + 2 : DrawAnim(30,8,62); + 4 : begin + DrawAnim(5,2,62); + DrawAnim(5,122,62); + end; + 6 : DrawAnim(80,6,61); +{ 7 : DrawAnim(5,2,62); } + end; + + SiirraStandardiPaletti; + + case style of + 0 : MuutaLogo(0); { logo sinisen s„vyiksi } + 1,2,4 : MuutaMenu(3,0); { menu3 harmaaksi } + 6 : MuutaLogo(0); + end; { case } + + case color of + 1 : MuutaMenu(1,2); { menu1 violetiksi } + 2 : MuutaMenu(1,4); { menu1 ruskeaksi KOTH } + 3 : MuutaMenu(1,5); { menu1 punaiseksi WCRES } + 4 : MuutaMenu(1,1); { menu1 mustaksi 4HILLS } + 5 : MuutaMenu(1,3); { menu1 turkoosiksi? STATS } + end; { case } + + AsetaPaletti; + + DrawScreen; + +end; + + +procedure CloseGraph; +begin + AsetaMoodi($3); +end; + +procedure DetectVGA; +var error : byte; + +begin + asm + mov error,0 + mov ax,1a00h + int 10h + cmp al,1ah + je @a + mov error,1 +@a: + end; + + if (error=1) then begin writeln('No VGA found.'); halt; end; + +end; + + + +procedure DrawAnim(x,y:integer;num:byte); +{var x1,y1 : integer; } +{ var xsize,ysize : word; } + var xsize,ysize : integer; + +begin + + x:=x-AnimP[num,0]; + y:=y-AnimP[num,1]; + +(* xsize:=MemW[Anim[Num]:0]; { leveys } *) + ysize:=0; + + if (num>0) and (num<=numanim) then + begin + ysize:=MemW[Anim[Num]:2]; { korkeus } + + if (x>=0) and (y>=0) and + (x<320) and (y<200-ysize) then Maki.PiirraSprite(Anim[num],x,y); + end; + +end; + +function ReadByte(var f1:text):byte; +{var ch:char; } +begin + read(f1,ch); + readbyte:=ord(ch); +end; + + +procedure LoadAnim(filename:string); +var f1 : text; +{ ch : char; } + x,y,tempb,x2,y2 : byte; + xx,yy,temp : integer; +begin + + assign(f1,filename); + {$I-} + reset(f1); + {$I+} + FileOk(IOResult,filename); + +{ writeln; + writeln('File opened.'); } + + NumAnim:=0; + + x:=ReadByte(f1); + y:=ReadByte(f1); + + repeat + + inc(NumAnim); + +{ writeln(x,' ',y,' ',numanim); } + + AllocLarge(Anim[NumAnim],x*y+4); { varataan tilaa spritelle } + + MemW[Anim[NumAnim]:0]:=x; { leveys } + MemW[Anim[NumAnim]:2]:=y; { korkeus } + +{ writeln('info written.'); } + + for yy:=0 to y-1 do + for xx:=0 to x-1 do + begin + tempb:=ReadByte(f1); + if (tempb=9) then tempb:=15; { suksen keskityspiste (kai?) } + Mem[Anim[NumAnim]:yy*x+xx+4]:=tempb; { data } + end; + + AnimP[numanim,0]:=ReadByte(f1); { keskitt„misplussa x } + AnimP[numanim,1]:=ReadByte(f1); { -"- y } + + x:=ReadByte(f1); + y:=ReadByte(f1); + + + if (NumAnim=83) then { invert skis! } + for temp:=72 to 83 do + begin + inc(NumAnim); + x2:=MemW[Anim[temp]:0]; + y2:=MemW[Anim[temp]:2]; + + AllocLarge(Anim[NumAnim],x2*y2+4); { varataan tilaa } + + MemW[Anim[NumAnim]:0]:=x2; { leveys } + MemW[Anim[NumAnim]:2]:=y2; { korkeus } + + for yy:=0 to y2-1 do + for xx:=0 to x2-1 do + Mem[Anim[NumAnim]:yy*x2+xx+4]:=Mem[Anim[temp]:(y2-yy-1)*x2+xx+4]; + + AnimP[NumAnim,0]:=AnimP[temp,0]; + AnimP[NumAnim,1]:=y2-1-AnimP[temp,1]; + end; + + + until (x=255) and (y=255); + + close(f1); + +{ readln; } + +end; + +procedure PutPixel(x,y,c:integer); +var x1, y1 : word; +begin + if (x>=0) and (x<320) and (y>=0) and (y<200) then + begin + x1:=x; y1:=y; + mem[video:(y1*320)+x1]:=c; + end; + +end; + +procedure PutGPixel(x,y:integer;c:byte); +var temp : longint; +begin + temp:=y*Maki.XSize+x; + + Kirjoita(temp,c); +end; + +function GetPixel(x,y:word):byte; { en tied„ toimiiko } +begin + GetPixel:=mem[video:y*320+x]; +end; + +procedure EWriteFont(xx,yy:integer;s:string); +begin + writefont(xx-fontlen(s),yy,s); +end; + + +function DoFont(xx,yy:integer;s:string;draw:boolean):word; +var chh:char; + i,t : integer; + p : word; + +begin + + p:=0; { siirtym„ } + + for i:=1 to length(s) do + s[i]:=upcase(s[i]); + + for i:=1 to length(s) do + begin + + t:=100; + chh:=s[i]; + + case chh of +(* ' ','˙' : inc(p,4); { space ja 255 } *) + ' ' : inc(p,4); { vaan space! } + '$' : inc(p,5); { % numeron pituinen space } + '0' : t:=29; + '1'..'9' : t:=ord(chh)-19; + 'A'..'Z' : t:=ord(chh)-65; + '†','' : t:=26; + '„','Ž' : t:=27; + '”','™' : t:=28; + ':' : t:=39; + '.' : t:=40; + '?' : t:=41; + '!' : t:=42; + '*' : t:=43; + '-' : t:=44; + '+' : t:=45; + ',' : t:=46; + '(' : t:=47; + ')' : t:=48; + 'Ģ' : t:=49; { pieni m } + '"' : t:=50; { tuplaheittomerkki } + '''' : t:=51; { yksi”heittomerkki } + '#' : t:=52; + '›','' : t:=53; { norja ” eli o ja viiva halki } + '','š' : t:=54; { ber y } + 'á' : t:=55; { stuit staffel } + '/' : t:=56; + '’','‘' : t:=57; { AE:t } + '%' : t:=58; + end; + + if (t<>100) then + begin + inc(t); + if (Draw) then drawanim(xx+p,yy,t); { t+? riippuu muista animeista! } +{ inc(p,memW[Anim[t]:0]+1); } { vanhoilla fonteilla } + inc(p,memW[Anim[t]:0]); + end; + + end; + + DoFont:=p; + +end; + + +procedure WriteFont(xx,yy:integer;s:string); +begin + + if (xx>0) and (yy>0) then DoFont(xx,yy,s,True); + +end; + + + +function FontLen(s:string):word; +var temp:word; +begin + + temp:=DoFont(0,0,s,False); + + FontLen:=temp; + +end; + + + +procedure fontcolor(col:byte); +var temp,x,y,xx,yy : word; + tempb : byte; +begin + + for temp:=1 to 60 do + begin + x:=memW[Anim[temp]:0]; + y:=memW[Anim[temp]:2]; + + for yy:=0 to y-1 do + for xx:=0 to x-1 do + begin + tempb:=Mem[Anim[temp]:(yy*x)+xx+4]; + if (tempb <> 242) and (tempb <> 0) then + Mem[Anim[temp]:(yy*x)+xx+4]:=col; + end; + end; + +end; + + +Procedure FillArea(x1,y1,x2,y2:word;thing:integer); +var temp1, temp2 : word; + count : word; + scr : word; + ax,ay : word; + col, new : byte; + sizex,sizey : word; + index : integer; + +begin + + scr:=0; + count:=0; + + index:=63; + sizex:=19; + sizey:=13; + + ax:=0; + ay:=0; + + for temp1:=y1 to y2 do + for temp2:=x1 to x2 do + + begin + + scr:=(temp1*320)+temp2; + + col:=Mem[Video:scr]; + new:=col; + + ax:=(scr mod 320) mod sizex; + ay:=(scr div 320) mod sizey; + + if (thing=64) then + begin + ax:=((scr mod 320)+2) mod sizex; + ay:=((scr div 320)+7) mod sizey; + end; + + count:=(ay*sizex)+ax; + + if (new>242) and (new<246) and (Mem[Anim[index]:count+4] <> 0) then inc(new,5); + +{ inc(ax); if (ax>=19) then + begin + ax:=0; + inc(ay); + if (ay>=12) then ay:=0; + end; } + +{ inc(count); if (count>=19*12) then count:=0; } + + Mem[Video:scr]:=new; + + end; + +end; + + +(* +procedure HLine(x,y:integer;length:word;col:byte); +begin +end; + + +procedure Vline(x,y:integer;length:word;col:byte); +begin +end; +*) +procedure Fillbox(x,y,x2,y2:word;col:byte); +var xx,yy : word; +begin + for yy:=y to y2 do + for xx:=x to x2 do + mem[video:xx + yy shl 8 + yy shl 6]:=col; + { mem[video:(yy*320)+xx]:=col; } + +end; + +procedure Box(x,y,x2,y2:word;col:byte); +var xx,yy : word; +begin + + for xx:=x to x2 do + begin + putpixel(xx,y,col); + putpixel(xx,y2,col); + end; + + for yy:=y to y2 do + begin + putpixel(x,yy,col); + putpixel(x2,yy,col); + end; + +end; + +procedure Balk(st:byte); +begin + port[$3c8]:=0; port[$3c9]:=63*st; port[$3c9]:=0; port[$3c9]:=0; +end; + +(* +procedure angle(x,y,a,b,c:integer); +begin + { ei skulaa, eik„ tule skulaamaan. for compatibility } +end; +*) + +begin +end. { end unit } + diff --git a/SJ3HELP.PAS b/SJ3HELP.PAS new file mode 100644 index 0000000..a4eec8d --- /dev/null +++ b/SJ3HELP.PAS @@ -0,0 +1,433 @@ +Unit SJ3HELP; { SJ3:n apufunktioita, ei graafisia } + +interface + +var ch, ch2 : char; { n„ppisglobaalit } + +procedure beep(beeptapa:byte); +function round(r:single):longint; + +function nsqrt(x:single):single; +procedure putsaa; +procedure clearchs; +procedure waitforkey; +function waitforkey2:boolean; + +procedure cwrite(col:byte;str1:string); +procedure cwriteln(col:byte;str1:string); + +procedure dowindow(x1,y1,x2,y2,col:integer); + +procedure Fileok(IORes:integer;filename:string); + +function pcomp(score,sij:longint):longint; + +function sh(str1:string;maxpituus:byte):string; +function nsh(str1:string;maxpituus:integer):string; + +function paraletter(str1:string):char; + +function txtp(jokuluku:longint):string; +function txt(jokuluku:longint):string; +function num(jokustr:string):longint; +function upstr(str1:string):string; +function nmstr(str1:string):string; +function toansi(str1:string):string; + +implementation + +uses maki, sj3unit, crt, dos, sj3graph; + +procedure Wait(C : integer) ; + var T : byte ; + Tkr : byte absolute $40:$6C ; + begin + repeat + T := Tkr; + repeat until T<>Tkr; + Dec(C); + until (C<=0); +end {Wait} ; + + +function round(r:single):longint; +var l : longint; +begin + l := trunc(r); + if (frac(r) >= 0.5) then inc(l); + if (frac(r) <= -0.5) then dec(l); + + round := l; + +end; + + + +procedure beep(beeptapa:byte); +var t1, t2 : Time; +begin +(* + sound(1000*beeptapa); + delay(15); + NoSound; +*) + +(* ok - kotitekoinen + sound(1000*beeptapa); + GetTime(t1.Hour,t1.Minute,t1.Second,t1.Sec100); + t2:=t1; + + repeat + GetTime(t1.Hour,t1.Minute,t1.Second,t1.Sec100); + + until (t1.Sec100 <> t2.Sec100); + + NoSound; +*) + + sound(1000*beeptapa); + wait(2); + NoSound; + + +end; + +function HexW(W: word): string; {Word} + const + HexChars: array [0..$F] of Char = '0123456789ABCDEF'; + begin + HexW := + HexChars[(W and $F000) shr 12] + + HexChars[(W and $0F00) shr 8] + + HexChars[(W and $00F0) shr 4] + + HexChars[(W and $000F)]; + end; + +function nsqrt(x:single):single; +var temp : single; +begin + + temp:=sqrt(abs(x)); + + if (x<0) then temp:=-temp; + + nsqrt:=temp; + +end; + + +procedure putsaa; +{var ch : char; } + begin + while keypressed do readkbd(ch,ch2); + end; + +procedure clearchs; + begin + ch:=#1; ch2:=#1; + end; + +procedure waitforkey; +{var ch : char; } +begin + putsaa; + readkbd(ch,ch2); +end; + +Function waitforkey2:boolean; +var tempboole : boolean; +{ ch2 : char; } +begin + + putsaa; + + tempboole:=false; + + readkbd(ch,ch2); + + if (ch=#0) and (ch2=#68) then tempboole:=true; + + waitforkey2:=tempboole; + +end; + + +procedure cwrite(col:byte;str1:string); +begin + textcolor(col); + write(str1); +end; + +procedure cwriteln(col:byte;str1:string); +begin + textcolor(col); + writeln(str1); +end; + + +procedure dowindow(x1,y1,x2,y2,col:integer); +begin + window(x1,y1,x2,y2); + textbackground(col); + clrscr; +end; + +function pcomp(score,sij:longint):longint; +var temp : longint; +begin + pcomp:=(score*51)+50-sij; +{ pcomp:=score*51; } +end; + + +function plusstr(points:integer):integer; +begin + plusstr:=length(txtp(points))*6; +end; + + + +Function sh(str1:string;maxpituus:byte):string; +var temp1,temp2 : byte; +var str2 : string; +begin + + str2:=''; + temp2 := length(str1); + + if (temp2>maxpituus) then + begin + for temp1:=2 to temp2-1 do + if (str1[temp1]=' ') and (str1[temp1+1]<>' ') then + begin + str2:=str1[1]+'.'+copy(str1,temp1,temp2-temp1+1); + if (length(str2)<=maxpituus) then begin sh:=str2; exit; end; + end; + + if str2='' then str2:=str1; + + temp1:=length(str2); + + if (temp1>maxpituus) then + str2:=copy(str2,1,maxpituus-1)+'.'; + + end else str2:=str1; + + sh:=str2; + +end; + + + + +function nsh(str1:string;maxpituus:integer):string; +var temp1,temp2, temp3 : integer; +var str2 : string; +begin + + str2:=''; + temp2 := fontlen(str1); + temp3 := length(str1); + + if (temp2>maxpituus) then + begin + + for temp1:=2 to temp3-1 do + if (str1[temp1]=' ') and (str1[temp1+1]<>' ') then + begin + str2:=str1[1]+'.'+copy(str1,temp1,temp3-temp1+1); + if (fontlen(str2) <= maxpituus) then begin nsh:=str2; exit; end; + end; + + if (str2='') then str2:=str1; + + temp1:=fontlen(str2); + temp3:=length(str2); + + if (temp1>maxpituus) then + while (fontlen(str2) > maxpituus) do + begin + dec(temp3); + str2:=copy(str2,1,temp3)+'.'; + end; + + end else str2:=str1; + + nsh:=str2; + +end; + +function paraletter(str1:string):char; +var tempch : char; + temp : integer; +begin + + tempch:=#0; + temp:=1; + + while (str1[temp]<>')') and (temp1) then tempch:=str1[temp-1]; + + paraletter:=tempch; + +end; + + + +Procedure savescreen(str1:string); +var f1 : text; + temp : integer; + begin + assign(f1,str1); + + ReWrite(f1); + + for temp:=0 to 1999 do + begin + if temp mod 80 = 0 then writeln(f1); + + write(f1,chr(mem[$b800:temp*2])); + + end; + + + Close(f1); + + end; + +Function txtp(jokuluku:longint):string; +var str1 : string; +begin + str(abs(jokuluku),str1); + insert('.',str1,length(str1)); + + if (length(str1)<3) then str1:='0'+str1; + + if (jokuluku<0) then str1:='-'+str1; + + if (jokuluku<>0) then txtp:=str1 else txtp:='0.0'; +end; + +Function txt(jokuluku:longint):string; +var str1 : string; +begin + str(jokuluku,str1); + if (jokuluku<>0) then txt:=str1 else txt:='0'; +end; + +Function num(jokustr:string):longint; +var temp : longint; + code : integer; +begin + + val(jokustr,temp,code); + if (code>0) then temp:=-1; + + num:=temp; + +end; + +procedure Fileok(IORes:integer;filename:string); +begin + + if (IORes<>0) then + begin + AsetaMoodi($3); + Writeln('SJ3 error: Can''t find file ',filename,'. Where have you put it? '); + Readln; + Halt; + end; + +end; + + +function upstr(str1:string):string; +var outstr : string; + index : integer; +begin + + outstr:=str1; + + for index:=1 to length(outstr) do + begin + outstr[index]:=upcase(outstr[index]); + + case outstr[index] of + '†' : outstr[index]:=''; + '„' : outstr[index]:='Ž'; + '”' : outstr[index]:='™'; + '' : outstr[index]:='š'; + '›' : outstr[index]:=''; + '‘' : outstr[index]:='’'; + end; + + end; + + upstr:=outstr; + +end; + +function toansi(str1:string):string; +var outstr : string; + index : integer; +begin + + outstr:=str1; + + for index:=1 to length(outstr) do + begin + case outstr[index] of + '' : outstr[index]:='Â'; + 'Ž' : outstr[index]:='Ä'; + '™' : outstr[index]:='Ö'; + 'š' : outstr[index]:='Ü'; + '' : outstr[index]:='Ø'; + '’' : outstr[index]:='Æ'; + '†' : outstr[index]:='å'; + '„' : outstr[index]:='ä'; + '”' : outstr[index]:='ö'; + '' : outstr[index]:='ü'; + '›' : outstr[index]:='ø'; + '‘' : outstr[index]:='æ'; + 'á' : outstr[index]:='ß'; { beta? } + end; + + end; + + toansi:=outstr; + +end; + + + +function nmstr(str1:string):string; +var outstr : string; + index : integer; +begin + + outstr:=upstr(str1); + + for index:=1 to length(outstr) do + begin + if (index>1) and (outstr[index-1]<>' ') then + begin + case outstr[index] of + 'A'..'Z' : outstr[index]:=chr(ord(outstr[index])+32); + '' : outstr[index]:='†'; + 'Ž' : outstr[index]:='„'; + '™' : outstr[index]:='”'; + 'š' : outstr[index]:=''; + '' : outstr[index]:='›'; + '’' : outstr[index]:='‘'; + end; + end; + end; + + nmstr:=outstr; + +end; + + +end. + diff --git a/SJ3INFO.PAS b/SJ3INFO.PAS new file mode 100644 index 0000000..35d8b0d --- /dev/null +++ b/SJ3INFO.PAS @@ -0,0 +1,2531 @@ +unit sj3info; { pelaaja & profiili-infoa } + + {$I REGSTAT.PAS} + +interface { -------------------------------------------------------------- } + +uses maki,{crt,} windos, sj3unit, sj3help, sj3graph, sj3lang, sj3pcx; + +const NumHiscores = 61; { 1-20=WC + 21-30=TC + 31-35=4h + 36-41=KOTH + 42-61=CC } + +type Profile_type = record + name, realname : NameStr; + suitcolor, skicolor, kothlevel, replace, bestwchill, besthill, cstyle,skipquali : byte; + bestwcjump, bestpoints, best4points, bestjump : word; + besthillfile : string[12]; + bestresult, best4result : string[20]; + wcs, legswon, wcswon, totaljumps : longint; + end; + +var top : array[0..NumHiscores] of Hiscore; + nimet : array[0..NumPl+1] of NameStr; + jnimet : array[0..NumTeams] of NameStr; + + pmaara : byte; + + NumProfiles : byte; { piilota alas } + + profileorder : array[0..20] of byte; + profile : array[0..20] of Profile_type; { ehk„ my”s } + +(* HR : array[0..NumWCHills+MaxExtraHills] of Hillrec; { uusi 3.10 } *) + +procedure LoadNames(whatset:char; + teamdiscount:byte; + var teamlineup:array of byte; + replaces:boolean); + +procedure profiles; + +procedure chooseseecomps(var seecomps:byte); +procedure welcomescreen(var languagenumber:byte); + +procedure WriteProfiles; +procedure LoadProfiles; +procedure ResetTops(kerroin:byte;Today:Date;Now:Time); +{procedure loadcustomrecord(SetFile:string;var sortby:byte); } + +{procedure writecustomrecord(SetFile:string;sortby:byte); } + +function loadcustom(SetFile:string;var sortby:byte; + var HillOrder:array of integer; + var CupHills:integer):longint; + +function writecustom(SetFile:string;sortby:byte; + HillOrder:array of integer;CupHills:integer):integer; + + +procedure FindCustoms(var NumCustoms:integer; + var Filenames:array of FileStr); + +procedure selectcustomhills(var sortby:byte;var CupHills:integer; + var HillOrder : array of integer; + var SetFile:string); + +procedure newcrecordscreen(SetFile:string;NewHi,OldHi:Hiscore;sortby:byte); + +procedure CallSendme(version,regname,regnumber:string; + Today:date;Now:Time; vcode:byte); + +procedure drawmainmenu; + +implementation { ********************************************************* } + +{$IFDEF REG} +const maxcustomhills = 40; +{$ELSE} +const maxcustomhills = 5; +{$ENDIF} + +var maxprofiles, maxpmaara : integer; + + +procedure defaulthi(var hi:hiscore); +begin + + with hi do + begin + name:='Nobody'; + pos:=0; + score:=0; + time:='-'; + end; + +end; + + +function loadcustom(SetFile:string;var sortby:byte; + var HillOrder:array of integer; + var CupHills:integer):longint; + +var temp,temp2,nytmaki : integer; + str1:string; + f2 : text; + code, checksum, compare, compare2 : longint; + +begin + + {$I-} + assign(f2,Setfile+'.SJC'); + reset(f2); + {$I+} + +{ defaulthi(Hi); } + + code:=0; + checksum:=0; compare:=0; compare2:=0; + + for temp:=1 to 20 do defaulthi(top[temp+41]); + + if (IOResult=0) then + begin + sortby:=0; + {$I-} { ei niin v„li„ vaikkei l”ytyisik„„n } + + readln(f2,Cuphills); + + temp:=0; + + repeat + + readln(f2,nytmaki); + + if (nytmaki>NumWChills) then + begin + nytmaki:=-1; + readln(f2,str1); + + if (numextrahills>0) then + for temp2:=1 to numextrahills do + if (hillfile(temp2) = str1) then nytmaki:=temp2+NumWChills; + + end; + + if (nytmaki>0) then + begin + inc(temp); + HillOrder[temp]:=nytmaki; + end; + + until (nytmaki=0) or (temp>=40); + + if (temp>=40) then { se lopettava nolla pois } + begin + readln(f2,nytmaki); + while (nytmaki<>0) do readln(f2,nytmaki); + end; + + CupHills:=temp; + if (CupHills=0) then code:=-1; + + for temp:=1 to 4 do readln(f2,str1); { v3.10 enkka pois alta } + + readln(f2,sortby); + if (sortby<>1) then sortby:=0; + + readln(f2,str1); + val(str1,code,temp); { luetaan code } + if (code=0) and (temp<>0) then code:=1; + + { v3.12 lis„ys #1 start / ei lueta codea vaan lasketaan se } + compare2:=0; + inc(compare2,svaluestr(upstr(setfile),11)*13+1); + + for temp:=1 to CupHills do + begin + inc(compare2,hillcode(Hillorder[temp]) mod 193557); + end; + + compare2:=compare2 xor (566727+sortby*2); + + { v3.12 lis„ys end } + + readln(f2,str1); + + for temp:=1 to 20 do + if (not eof(f2)) then + with top[temp+41] do + begin + readln(f2,name); inc(checksum,svaluestr(name,temp)); + readln(f2,pos); inc(checksum,(pos+temp)*11); + readln(f2,score); inc(checksum,(score+temp+1)*3); + readln(f2,time); + end; + + readln(f2,str1); + compare:=0; + val(str1,compare,temp); + + checksum:=checksum xor 131333; + + if (compare<>checksum) or (compare2<>code) then + for temp:=1 to 20 do + defaulthi(top[temp+41]); + + { v3.12 muutos #2 start / yksi uusi checksum (sis. code) } + + readln(f2,str1); { luetaan se jos sit„ on } + { t„st„ seuraa ett„ v3.11:n SJC nollautuu v3.12:ssa! } + compare:=0; + val(str1,compare,temp); + + checksum:=checksum xor 131333; + checksum:=((checksum + 5 + code)*2) xor 356777; + + if (compare<>checksum) then + for temp:=1 to 20 do + defaulthi(top[temp+41]); + { v3.12 muutos #2 end } + + {$I+} + + close(f2); + + end; + + loadcustom:=code; + +end; + + + +function writecustom(SetFile:string;sortby:byte; + HillOrder:array of integer;CupHills:integer):integer; + +var temp,result : integer; + str1:string; + checksum, code : longint; + f2 : text; + +begin + + {$I-} + assign(f2,Setfile+'.SJC'); + rewrite(f2); + {$I+} + + checksum:=0; + result:=1; + + if (IOResult=0) then + begin + + code:=0; { SJC:n m„kij„rkk„koodi } + setfile:=upstr(setfile); + + writeln(f2,CupHills); + inc(code,svaluestr(setfile,11)*13+1); + + for temp:=1 to CupHills do + begin + writeln(f2,HillOrder[temp]); + inc(code,hillcode(Hillorder[temp]) mod 193557); + if (HillOrder[temp] > NumWCHills) then writeln(f2,hillfile(HillOrder[temp]-NumWCHills)); + end; + + code:=code xor (566727+sortby*2); + + writeln(f2,'0'); { endofhillsequence } + + writeln(f2,'v3.12 SJC'); { vanha enkkastandardi } + writeln(f2,'0'); + writeln(f2,'0'); + writeln(f2,'-'); + + writeln(f2,sortby); { uutta } + + writeln(f2,code); + writeln(f2,'0'); + + for temp:=1 to 20 do + with top[temp+41] do + begin + writeln(f2,name); inc(checksum,svaluestr(name,temp)); + writeln(f2,pos); inc(checksum,(pos+temp)*11); + writeln(f2,score); inc(checksum,(score+temp+1)*3); + writeln(f2,time); + end; + + checksum:=checksum xor 131333; + writeln(f2,checksum); + { v3.12 muutos #2 } + checksum:=checksum xor 131333; + checksum:=((checksum + 5 + code)*2) xor 356777; + writeln(f2,checksum); + + result:=0; + + close(f2); + + end; + + writecustom:=result; + +end; + + + +procedure newcrecordscreen(SetFile:string;NewHi,OldHi:Hiscore;sortby:byte); +var tempb : boolean; +{ tempch : char; } + str1 : string; +begin + + tempb:=true; + if (Oldhi.score<=0) then tempb:=false; + + fillbox(54,59,276,135,248); + fillbox(55,60,275,134,243); + + fontcolor(246); + writefont(75,69,lstr(128)); + str1:=txt(newhi.score); + if (sortby=1) then str1:=txtp(newhi.score); + + ewritefont(242,80,str1); + + fontcolor(240); + writefont(85,80,nsh(newhi.name,90)); + ewritefont(200,80,txt(newhi.pos)+'.'); + + fontcolor(241); + writefont(95,87,newhi.time); + writefont(75,100,lstr(129)); + + if (tempb) then + begin + str1:=txt(oldhi.score); + if (sortby=1) then str1:=txtp(oldhi.score); + writefont(85,110,nsh(oldhi.name,90)); + ewritefont(200,110,txt(oldhi.pos)+'.'); + ewritefont(242,110,str1); + writefont(95,117,oldhi.time); + end + else writefont(85,110,'-'); + + drawscreen; + + waitforkey; + +end; + + + +procedure FindCustoms(var NumCustoms:integer; + var Filenames:array of FileStr); + +var DirInfo : TSearchRec; + Attr : word; + temp3 : integer; +begin + + NumCustoms:=0; + for temp3:=0 to Maxcustoms do FileNames[temp3]:=''; + + Attr:=0; + + FindFirst('*.SJC', Attr, DirInfo); + + while (DosError = 0) and (NumCustoms < maxcustoms) do + begin + + inc(NumCustoms); + + temp3:=0; + + while (DirInfo.Name[temp3]<>'.') do + begin + filenames[NumCustoms]:=filenames[NumCustoms]+DirInfo.Name[temp3]; + inc(temp3); + end; + + if (filenames[NumCustoms] = 'TEMP') then + begin filenames[NumCustoms]:=''; dec(NumCustoms); end; + + FindNext(DirInfo); + + end; + + DosError:=0; + +end; + + + +procedure selectcustomhills(var sortby:byte;var CupHills:integer; + var HillOrder : array of integer; + var SetFile:string); + + +var hill, x, y : integer; +{ max : byte; } + tempstr : string; + temphi : Hiscore; + +{ cols : array[1..4] of integer; + start, hill : integer; } + + procedure dohill(num:integer;phase:byte); { 1 - valinnassa, 2 - saletti, 3 - del } + var x : integer; + str1 : string; + begin + + y:=num*7+32; + x:=17; if (num>20) then begin x:=162; dec(y,140); end; + hill:=HillOrder[num]; + + fillbox(x,y-1,x+142,y+7,248); + + if (phase=3) then + begin + fillbox(x,y-1,x+142,y+7,243); + fillarea(x,y-1,x+142,y+7,63); + end + else + begin + fontcolor(246); + if (phase=2) then ewritefont(x+14,y,txt(num)+'.'); + + if (phase=1) then fontcolor(241); + if (phase=2) then + if (hill>NumWCHills) then fontcolor(253) + else fontcolor(240); + + str1:=nsh(hillname(hill),104); + writefont(x+15,y,str1); + if (phase=2) then fontcolor(247); + writefont(x+18+fontlen(str1),y,'K'+txt(hillkr(hill))); + end; + + end; + + procedure doscreen; + var temp2:integer; + begin + NewScreen(2,0); + + fontcolor(240); + writefont(68,8,lstr(118)); + + fontcolor(241); + writefont(78,16,lstr(119)); + + writefont(78,23,lstr(285)+', '+lstr(286)+', '+lstr(287)); + writefont(78,30,lstr(288+sortby)); + +{ + fontcolor(247); + writefont(40,24,lstr(141)); + writefont(295,24,lstr(142)); +} + if (CupHills>0) then + for temp2:=1 to CupHills do dohill(temp2,2); + + drawscreen; + end; + + +(* + function loadcustom(filename:string):integer; + var result : byte; + nytmaki, temp1, temp2 : integer; + str1 : string; + ok : boolean; + f1 : text; + begin + + {$I-} + assign(f1,filename); + reset(f1); + {$I+} + result:=1; + + if (IOResult=0) then + begin + readln(f1,Cuphills); + + temp1:=0; + + repeat + + readln(f1,nytmaki); + + if (nytmaki>NumWChills) then + begin + nytmaki:=-1; + readln(f1,str1); + if (numextrahills>0) then + begin + for temp2:=1 to numextrahills do + if (hillfile(temp2) = str1) then nytmaki:=temp2+NumWChills; + end; + end; + + if (nytmaki>0) then + begin + inc(temp1); + HillOrder[temp1]:=nytmaki; + end; + + until (nytmaki=0); + + {$I-} + readln(f1,temphi.name); + readln(f1,temphi.pos); + readln(f1,temphi.score); + readln(f1,temphi.time); + sortby:=0; + readln(f1,sortby); { v3.10:n SJC:ss„ t„t„ ei ole } + if (sortby<>1) then sortby:=0; { jos se lukee v3.10sjc:st„ mit„ sattuu } + {$I+} + + close(f1); + + CupHills:=temp1; + if (CupHills>0) then result:=0; + + end; + + LoadCustom:=result; + + end; +*) + + function selectload:byte; { palauttaa: 0 - ladattu, 1 - ei } + + var filenames:array [0..maxcustoms] of FileStr; + numcustoms, actcustom : integer; + leave2 : boolean; + temp2 : integer; + tempb,result : byte; + temphillorder : array[0..41] of integer; + + procedure nocustoms; + begin + resultbox(4,0); + end; + + + begin + + findcustoms(NumCustoms,Filenames); + result:=1; + + if (numcustoms>0) then + begin + + actcustom:=1; + + repeat + + loadcustom(filenames[actcustom],tempb,tempHillOrder,temp2); { just hi's } + temphi:=top[42]; + + leave2:=true; { v„liaikaisk„yt”ss„ } + if (temphi.score=0) then leave2:=false; + + fillbox(74,69,246,151,248); + fillbox(75,70,245,150,243); + + fontcolor(240); + writefont(85,75,lstr(116)); + if (leave2) then writefont(95,130,nsh(temphi.name,90)) + else writefont(95,130,'-'); + + fontcolor(241); + writefont(85,85,lstr(150)); + writefont(85,121,lstr(115)); + + if (leave2) then + begin + writefont(95,139,temphi.time); +{ ewritefont(210,130,txt(temphi.pos)+'.'); } + end; + + fillbox(85,95,180,115,245); + ewritefont(220,102,txt(actcustom)+' / '+txt(numcustoms)); + fontcolor(246); + writefont(95,102,filenames[actcustom]); + tempstr:=txt(temphi.score); + if (tempb=1) then tempstr:=txtp(temphi.score); + + if (leave2) then ewritefont(232,130,tempstr); + + leave2:=false; + + drawscreen; + + clearchs; + readkbd(ch,ch2); + + if (ch='+') or (ch=' ') or (ch2=#77) or (ch2=#80) then inc(actcustom); + if (ch='-') or (ch2=#75) or (ch2=#72) then dec(actcustom); + if (ch2=#71) then actcustom:=1; + if (ch2=#79) then actcustom:=numcustoms; + + if (actcustom<1) then actcustom:=1; + if (actcustom>numcustoms) then actcustom:=numcustoms; + + if (ch2=#83) then { delete! } + begin + if (mightdelete(filenames[actcustom]+'.SJC') = 0) then + begin + FindCustoms(NumCustoms,Filenames); + actcustom:=1; + setfile:='TEMP'; + if (numcustoms=0) then + begin + nocustoms; + leave2:=true; + end; + end; + doscreen; + end; + + if (ch=#27) or (ch2=#68) then leave2:=true; + + if (ch=#13) then + begin + if (loadcustom(filenames[actcustom],sortby,HillOrder,CupHills) > 0) then + begin + leave2:=true; + setfile:=filenames[actcustom]; + result:=0; + {if (Cuphills <= max) then inc(Cuphills);} + end; + end; + + until (leave2); + + end else + begin + nocustoms; + end; + + doscreen; + clearchs; + + selectload:=result; + + end; + +(* + function savecustom(filename:string):integer; + var f1 : text; + temp2,result : integer; + code : longint; + + begin + result:=1; + {$I-} + assign(f1,filename+'.SJC'); + rewrite(f1); + {$I+} + code:=0; + + if (IOResult=0) then + begin + writeln(f1,CupHills); + inc(code,svaluestr(filename,11)*13+1); + + for temp2:=1 to CupHills do + begin + writeln(f1,HillOrder[temp2]); + inc(code,hillcode(Hillorder[temp2]) mod 193557); + if (HillOrder[temp2] > NumWCHills) then writeln(f1,hillfile(HillOrder[temp2]-NumWCHills)); + end; + + code:=code xor (566727+sortby*2); + + writeln(f1,'0'); + + defaulthi(temphi); { aina nollista } + writeln(f1,temphi.name); + writeln(f1,temphi.pos); + writeln(f1,temphi.score); + writeln(f1,temphi.time); { enkkatiedot v3.10 yhteensopivuutta varten } + + inc(code,sortby); + writeln(f1,sortby); { v3.11 lukee ne n„iden j„lkeen } + writeln(f1,code); + writeln(f1,'0'); + + close(f1); + result:=0; + end; + + savecustom:=result; + + end; +*) + + + function saveset:integer; { palauttaa: 0 - save onnistui, 1 - ei } + var f1 : text; + result,temp : integer; + str1 : string; + { tempch,tempch2 : char; } + + begin + + result:=1; + + str1:='CUSTOM'; + + fillbox(74,69,246,121,248); + fillbox(75,70,245,120,243); + + fontcolor(240); + writefont(85,75,lstr(117)); + fontcolor(241); + writefont(85,85,lstr(293)); + + fillbox(85,95,180,115,245); + fontcolor(246); + + str1:=getstr2(95,102,8,str1,245); + str1:=upstr(str1); + + if (str1<>'˙') then + begin + ch:='Y'; + + if (fexist(str1+'.SJC')) then { file exists } + begin + alertbox; + + writefont(80,90,'FILE '+str1+'.SJC ALREADY EXISTS.'); + writefont(80,110,'WRITE OVER? (Y/N):'); + + getch(190,110,243,ch,ch2); + end; + + if (upcase(ch)='Y') then + begin + for temp:=1 to 20 do defaulthi(top[temp+41]); + result:=WriteCustom(str1,sortby,hillorder,cuphills); + end; + + end; + + resultbox(2,result); + if (result=0) then SetFile:=str1; + + doscreen; + + clearchs; + + saveset:=result; + + end; + + function hillsummary:string; + var temp : integer; + sum : string; + begin + sum:=''; + + for temp:=1 to CupHills do + sum:=sum+chr(hi(HillOrder[temp]))+chr(lo(HillOrder[temp])); + + sum:=sum+chr(sortby); + + hillsummary:=sum; + end; + + + procedure doselection; + var loop, loop2 : integer; + str1 : string; + leave : boolean; + {ch, ch2 : char; } + hills,tempb : byte; + + begin + + hills:=NumWCHills+NumExtraHills; + + for loop:=0 to 41 do + HillOrder[loop]:=1; + + CupHills:=1; + +{ LoadCustom('TEMP.SJC'); } + + LoadCustom(SetFile,sortby,hillorder,cuphills); + + str1:=hillsummary; { str1 indikoi muutoksia } + + doscreen; + + repeat + +{ if (CupHills <= max) then inc(CupHills); } + + repeat + + dohill(CupHills+1,1); + +{ writefont(1,1,txt(CupHills)); } + + fillbox(250,30,305,36,243); + fillarea(250,30,305,36,63); + + if (str1=hillsummary) and (SetFile<>'TEMP') then + begin + fontcolor(241); + ewritefont(305,30,'('+SetFile+')'); + end; +{ ewritefont(300,18,txt(length(hillsummary))); } + + DrawScreen; + + clearchs; + + readkbd(ch,ch2); + + if ((ch2=#71) or (ch2=#83)) then HillOrder[CupHills+1]:=1; { home } + if (ch2=#79) then HillOrder[CupHills+1]:=Hills; { end } + if ({(ch2=#72) or} (ch2=#75)) and (HillOrder[CupHills+1]>1) then dec(HillOrder[CupHills+1]); + if ({(ch2=#80) or} (ch2=#77)) and (HillOrder[CupHills+1]5) then dec(HillOrder[CupHills+1],5); + if (ch2=#81) and (HillOrder[CupHills+1]0) then { delete } + begin + dohill(Cuphills+1,3); + dec(CupHills); + end; + if (upcase(ch)=paraletter(lstr(285))) then if (selectload=0) then str1:=HillSummary; + if (upcase(ch)=paraletter(lstr(286))) and (CupHills>0) then if (saveset=0) then str1:=HillSummary; + if (upcase(ch)=paraletter(lstr(288))) then + begin + inc(sortby); + if (sortby=2) then sortby:=0; + doscreen; + end; + + if (upcase(ch)=paraletter(lstr(287))) then { randomize } + begin + if (cuphills < maxcustomhills) then + begin + loop2:=20; + if (cuphills>=20) then loop2:=maxcustomhills; + for loop:=cuphills+1 to loop2 do + begin + HillOrder[loop]:=random(20)+1; + dohill(loop,2); + end; + CupHills:=loop2; + end; + end; + + until (ch=#13) or (ch=#27) or (ch2=#80) or (ch=' '); + +{ if (ch=#27) then dec(CupHills); } + + if ((ch=' ') or (ch2=#80)) then + begin + if (CupHills < maxcustomhills) then inc(CupHills); + dohill(CupHills,2); + end; + + until (ch=#13) or (ch=#27); + + if (str1<>HillSummary) then SetFile:='TEMP'; { setti muuttunut, enkat menee t„nne } + + if ((ch2=#68) or (ch=#27)) then CupHills:=0; { kikkaillaan v„h„n... } + + if (CupHills>0) then + begin + dohill(CupHills+1,3); { pois j„m„ } + + for loop:=1 to CupHills do dohill(loop,2); + +{ ewritefont(300,24,str1); + ewritefont(300,32,hillsummary); } + + waitforkey3(295,183,ch); + + { inc(CupHills); } + WriteCustom('TEMP',sortby,hillorder,cuphills); + + end; + + if (CupHills=0) then HillOrder[1]:=1; +(* + else + begin { t„„ on sit„ kun siirretyt taulukot alkaa nollasta } + for loop:=1 to CupHills do + HillOrder[loop-1]:=HillOrder[loop]; + + end; +*) + + + + end; + +begin { p„„proceduuri } + + defaulthi(temphi); + + doselection; + +end; + + + +Procedure LoadNames(whatset:char; + teamdiscount:byte; + var teamlineup:array of byte; + replaces:boolean); + +var f4 : text; + l1, l2 : longint; + s : string; + temp,c, temp2, temp3 : integer; + ok : boolean; + tempb : byte; + +begin + + l1:=0; { checksum-laskuri } + l2:=0; + + s:='names'+whatset+'.ski'; + + assign(f4,s); + {$I-} + reset(f4); + {$I+} + FileOK(IOResult,s); + + readln(f4,s); { titlerivi pois } + + temp2:=0; { toteutuneet nimet } + + for temp:=1 to NumPl+1 do + begin + readln(f4,s); + ok:=true; { k„yk” nimi eli ei kai ole replace-listoilla } + + for temp3:=1 to pmaara do + if (profile[profileorder[temp3]].replace = temp) and (replaces) then ok:=false; + + if (ok) then + begin + inc(temp2); + nimet[temp2]:=s; + end; + + inc(l1,valuestr(s,temp mod 43)); + + end; + + if (nimet[76]='') then nimet[76]:='Trainee'; + + for temp:=1 to pmaara do { siirret„„n profilesta nimet } + begin + nimet[NumPl+1-temp]:=Profile[profileorder[temp]].name; + end; + + +(* + for temp:=1 to NumPl-pldiscount do + nimet[temp]:='Mieshmieshmieshmieshmieshmiesh '+txt(temp); +*) + +{ nimet[NumPl+1]:='The Training Man'; } + + readln(f4,s); { tyhj„ rivi, ehk„ koodi } + + for temp:=1 to NumTeams-1 do + begin + readln(f4,s); + inc(l1,valuestr(s,temp mod 31)); + + for temp2:=1 to 4 do + begin + readln(f4,tempb); + if (tempb<0) or (tempb>67) then tempb:=1; + inc(l1,tempb mod temp2); + + if (templ2) then + begin + AsetaMoodi($3); + writeln('Error #92: Something wrong with the namefile. Shit.'); + Waitforkey; + Halt; + end; + +{ writeln(l1); + writeln(l2); + readln; } + +end; + + +procedure ResetTops(kerroin:byte;Today:Date;Now:Time); +var temp : integer; + name : NameStr; + len : integer; + time : TimeStr; + +begin + + top[01].score:=1515;top[01].pos:=1; { 1 } + top[02].score:=1343;top[02].pos:=1; { 3 } + top[03].score:=1212;top[03].pos:=2; { 5 } + top[04].score:=1101;top[04].pos:=3; { 7 } + top[05].score:=999; top[05].pos:=4; { 9 } + top[06].score:=888; top[06].pos:=5; { 11 } + top[07].score:=777; top[07].pos:=6; { 13 } + top[08].score:=665; top[08].pos:=7; { 15 } + top[09].score:=555; top[09].pos:=8; { 17 } + top[10].score:=494; top[10].pos:=10; { 19 } + top[11].score:=444; top[11].pos:=12; { 21 } + top[12].score:=383; top[12].pos:=14; { 23 } + top[13].score:=333; top[13].pos:=16; { 25 } + top[14].score:=272; top[14].pos:=18; { 27 } + top[15].score:=222; top[15].pos:=20; { 29 } + top[16].score:=161; top[16].pos:=22; { 31 } + top[17].score:=111; top[17].pos:=25; { 33 } + top[18].score:=77; top[18].pos:=30; { 35 } + top[19].score:=33; top[19].pos:=35; { 37 } + top[20].score:=11; top[20].pos:=40; { 39 } + + for temp:=1 to 20 do + begin + top[temp].name:=nimet[top[temp].pos]+'˙'; + top[temp].time:=dayandtime(Today,Now); +{ top[temp].pos:=a*2-1; } +{ top[temp].score:=((37-a)*(28-a))-(a*3); } + end; + + for temp:=1 to NumWCHills do + begin + name:=nimet[1+random(6+random(10))]+'˙'; + len:=round(hillkr(temp)/0.94)*10*kerroin; + time:=dayandtime(Today,Now); + SetHRinfo(temp,name,len,time); + end; + + if (NumExtraHills>0) then + for temp:=1 to NumExtraHills do + begin + name:=nimet[1+random(6+random(10))]+'˙'; + len:=round(hillkr(temp+NumWCHills)/0.94)*10*kerroin; + time:=dayandtime(Today,Now); + SetHRinfo(temp+NumWCHills,name,len,time); + end; + + for temp:=21 to 30 do + begin + top[temp].pos:=round((temp-20)*1); + top[temp].name:=jnimet[top[temp].pos]+'˙'; + top[temp].time:=dayandtime(Today,Now); + end; + + top[21].score:=42; + top[22].score:=35; + top[23].score:=28; + top[24].score:=21; + top[25].score:=17; + top[26].score:=11; + top[27].score:=8; + top[28].score:=5; + top[29].score:=3; + top[30].score:=1; + + + top[31].score:=10111; top[31].pos:=1; + top[32].score:=9876; top[32].pos:=3; + top[33].score:=9449; top[33].pos:=6; + top[34].score:=9010; top[34].pos:=10; + top[35].score:=8321; top[35].pos:=15; + + for temp:=31 to 35 do + begin + top[temp].name:=nimet[top[temp].pos]+'˙'; +{ top[temp].pos:=(round((a-31)*2)+(a-30))*kerroin; } +{ top[temp].score:=(9999+500*31-a*500)*kerroin; } + top[temp].time:=dayandtime(Today,Now); + end; + + for temp:=1 to 35 do { katsos jos nollaa ne scoret! } + begin + top[temp].pos:=top[temp].pos*kerroin; + top[temp].score:=top[temp].score*kerroin; + end; + + for temp:=36 to 41 do + begin + top[temp].name:='Not Completed'; + top[temp].pos:=0; + top[temp].score:=0; + top[temp].time:=dayandtime(Today,Now); + end; +end; + + + +procedure defaultprofile(index:integer;phase:byte); +var temp : integer; + count, count2 : byte; + ok : boolean; + str1 : string; + +begin + + with Profile[index] do + begin + name:='SKI JUMPER'; + realname:=''; + suitcolor:=0; skicolor:=0; + kothlevel:=0; + replace:=0; cstyle:=1; + wcs:=0; legswon:=0; wcswon:=0; + bestwcjump:=0; bestwchill:=1; + bestjump:=0; besthill:=1; + besthillfile:='HILLBASE'; + bestresult:='-'; best4result:='-'; + bestpoints:=0; best4points:=0; + totaljumps:=0; + end; + + count2:=2; + + if (phase=1) then + repeat + + ok:=true; count:=0; + + for temp:=1 to numprofiles do + if (Profile[temp].name = Profile[index].name) and (temp<>index) then inc(count); + + if (count>0) then + begin Profile[index].name:='SKI JUMPER '+txt(count2); ok:=false; end; + + inc(count2); + + if (count2>200) then ok:=true; { jos se dorka j„„ rundiin } + + until (ok); + +end; + + + +function ProfileCode(P:Profile_type):longint; +var temp : longint; +begin + + temp:=0; + + with P do + begin + + inc(temp,valuestr(name+bestresult+best4result,11)); + inc(temp,suitcolor xor 31); + inc(temp,skicolor xor 53); + inc(temp,kothlevel and 44); + inc(temp,replace or 91); + inc(temp,bestwchill xor 157); + inc(temp,bestwcjump and 311); + inc(temp,besthill xor 113); + inc(temp,bestjump and 277); + inc(temp,bestpoints or 133); + inc(temp,best4points and 31); + + inc(temp,cstyle xor 37); + inc(temp,wcs and 741); + inc(temp,legswon or 453); + inc(temp,wcswon xor 857); + inc(temp,totaljumps+5); + + end; + + ProfileCode:=temp; + +end; + + + +procedure LoadProfiles; +var f1 : text; + temp : integer; + str1 : string; + l1, l2 : longint; +begin + +{$IFDEF REG} + maxpmaara:=10; maxprofiles:=20; { t„t„ kutsutaan kuitenkin ekana } +{$ELSE} + maxpmaara:=2; maxprofiles:=4; +{$ENDIF} + + str1:='PLAYERS.SKI'; + + assign(f1,str1); + {$I-} + reset(f1); + {$I+} + FileOK(IOResult,str1); + + for temp:=0 to 20 do DefaultProfile(temp,0); + + readln(f1,NumProfiles); + if (NumProfiles=0) or (NumProfiles>maxprofiles) then NumProfiles:=1; + + for temp:=1 to NumProfiles do + begin + str1:=#1; l1:=0; l2:=0; + while (str1[1]<>'*') do readln(f1,str1); + + with Profile[temp] do + begin + readln(f1,name); + readln(f1,suitcolor); readln(f1,skicolor); + readln(f1,cstyle); + readln(f1,kothlevel); readln(f1,replace); + readln(f1,wcs); readln(f1,legswon); readln(f1,wcswon); + readln(f1,bestwcjump); readln(f1,bestwchill); + readln(f1,bestjump); readln(f1,besthill); + readln(f1,besthillfile); + readln(f1,bestresult); readln(f1,bestpoints); + readln(f1,best4result); readln(f1,best4points); + readln(f1,totaljumps); + readln(f1,skipquali); + readln(f1,realname); if (realname='0') then realname:=name; + readln(f1); readln(f1); + readln(f1,l1); { checksum } + end; + + if (l1<>profilecode(Profile[temp])) then + begin + beep(1); + DefaultProfile(temp,0); + end; + +{$IFNDEF REG} + with Profile[temp] do + begin + suitcolor:=0; + skicolor:=0; + replace:=0; + end; +{$ENDIF} + + end; + + close(f1); + +end; + + + +procedure WriteProfiles; +var f1 : text; + temp : integer; + str1 : string; + l1, l2 : longint; +begin + + str1:='PLAYERS.SKI'; + + assign(f1,str1); + rewrite(f1); + + writeln(f1,NumProfiles); + if (NumProfiles=0) or (NumProfiles>20) then NumProfiles:=1; + + for temp:=1 to NumProfiles do + begin + + writeln(f1,'*'+txt(temp)); + + with Profile[temp] do + begin + writeln(f1,name); + writeln(f1,suitcolor); writeln(f1,skicolor); + writeln(f1,cstyle); + writeln(f1,kothlevel); writeln(f1,replace); + writeln(f1,wcs); writeln(f1,legswon); writeln(f1,wcswon); + writeln(f1,bestwcjump); writeln(f1,bestwchill); + writeln(f1,bestjump); writeln(f1,besthill); + writeln(f1,besthillfile); + writeln(f1,bestresult); writeln(f1,bestpoints); + writeln(f1,best4result); writeln(f1,best4points); + writeln(f1,totaljumps); + writeln(f1,skipquali); + writeln(f1,realname); + writeln(f1,'0'); writeln(f1,'0'); + end; + + writeln(f1,profilecode(Profile[temp])); + writeln(f1); + writeln(f1); + + end; + + close(f1); + +end; + + +procedure emptyedit; +begin + fillbox(166,4,319,198,244); + fillarea(166,4,319,198,63); +end; + + +procedure choosesuitski(index,phase:integer); { 0 -suit, 1 -ski} +var max, temp, x, y, value :integer; +begin + + if (fontlen(lstr(306))>fontlen(lstr(307))) then + x:=172+fontlen(lstr(306)) else + x:=172+fontlen(lstr(307)); + if (x>288) then x:=288; + + max:=NumSuits; + value:=Profile[index].SuitColor+1; + y:=24; + + for temp:=1 to Max do + LoadSuit(temp-1,temp); + + if (phase=1) then + begin + max:=NumSkis; + for temp:=1 to Max do + LoadSkis(temp-1,temp); + value:=Profile[index].SkiColor+1; + inc(y,8); + end; + + if (value=0) then value:=max-1; + + AsetaPaletti; + + fillbox(x,y,x+30,y+4+(max*8),242); + box(x,y,x+30,y+4+(max*8),244); + + for temp:=1 to Max do + begin + fillbox(x+6,y+4,x+24,y+8,temp*5); + if (phase=0) then + box(x+6,y+4,x+24,y+8,(temp*5)+2); + inc(y,8); + end; + + y:=y-59+(phase*32); + + value:=MakeMenu(x+9,y,24,8,Max-1,value,242,7,value); + + if (value=0) then value:=max; + if (phase=0) then Profile[index].SuitColor:=value-1 + else Profile[index].SkiColor:=value-1; + +{ drawscreen; } + +end; + + +procedure drawsuitski(index,phase:integer); +var x,xl,y, temp : integer; +begin + + LoadSuit(Profile[index].suitcolor,0); + LoadSkis(Profile[index].skicolor,0); + + if (fontlen(lstr(306))>fontlen(lstr(307))) then + x:=178+fontlen(lstr(306)) else + x:=178+fontlen(lstr(307)); + + xl:=x+18; if (xl>318) then xl:=318; + y:=28; + +{ if (phase=1) then fillbox(x-3,y-2,xl+3,y+6,242); } + +{ fillbox(x-2,y-1,xl+2,y+5,242); } + + fillbox(x,y,xl,y+4,216); + box(x,y,xl,y+4,218); + + inc(y,8); + +{ if (phase=2) then fillbox(x-2,y-1,xl+2,y+5,242); } + + fillbox(x+1,y+1,xl-1,y+3,231); + + asetapaletti; + +end; + + +procedure writeprofile(index,phase,inorder:integer); + { 0 - sivun„ytt”, 1 - edit } +var temp, temp2, colx, x, y : integer; + col1, col2 : byte; + str1 : string; + ActHill : hill_type; + + function gety:integer; + var tempy : integer; + begin + case temp of + 0..9 : tempy:=temp*8+4; + 10..15 : tempy:=temp*8+10; + 16..19 : tempy:=temp*16-118; + end; + gety:=tempy; + end; + +(* + function getsnum(temp2:integer):integer; + var tempy : integer; + begin + tempy:=304+temp2; + if (temp2>6) then tempy:=303+temp2; + if (temp2=6) then tempy:=218; + getsnum:=tempy; + end; +*) + +begin + + colx:=166; + + col1:=241; + col2:=246; + + emptyedit; + + if (phase=1) then + begin + col1:=240; + fillbox(175,85,305,85,241); + end; + if (numprofiles<16) then + begin + fillbox(1,175,158,199,243); + fillarea(1,175,158,199,63); + end; + + if (numprofiles<16) and (inorder>=0) then + begin + fontcolor(241); + temp:=2; + if (inorder>0) then temp:=0; + writefont(8,175,lstr(322)); + writefont(11,183,lstr(323+temp)); + writefont(11,191,lstr(324+temp)); + end; + + +if (index>0) and (index<=NumProfiles) then + begin + + fontcolor(col1); + +{ drawanim(250,44,179); } + drawsuitski(index,0); + + for temp:=1 to 18 do + begin + str1:=lstr(temp+303); + + if (phase=0) and (temp>7) and (temp<10) then str1:=''; + +{$IFNDEF REG} + if (phase=1) then + begin + if (temp=3) then fontcolor(241); + if (temp=6) then fontcolor(240); + end; +{$ENDIF} + + if (temp=10) and (phase=1) then fontcolor(241); + + writefont(colx,gety,str1); + + end; + + fontcolor(col2); + + for temp:=1 to 18 do + begin + str1:=''; + + with Profile[index] do + case temp of + 1 : str1:=name; + 2 : str1:=realname; + 5 : if (replace=0) then str1:='-' + else str1:=nimet[replace]; + 6 : if (cstyle=0) then str1:=lstr(9) + else str1:=lstr(361+cstyle*40); + 7 : str1:=lstr(231+skipquali); + 10 : str1:=txt(totaljumps); + 11 : str1:=txt(wcs); + 12 : str1:=txt(legswon); + 13 : str1:=txt(wcswon); + 14 : str1:=bestresult; + 15 : str1:=best4result; + 16 : if (bestwcjump=0) then str1:='-' + else str1:=txtp(bestwcjump)+'Ģ '+hillname(bestwchill); + 17 : if (bestjump=0) then str1:='-' + else + begin + if (besthill > NumWCHills) then + begin + temp2:=0; + + if (NumExtraHills>0) then + while (temp215) then inc(y,8) + else inc(x,fontlen(lstr(303+temp))); + + writefont(x,y,str1); + + end; + + + + end;{ else emptyedit; } + + + +end; + + +procedure doorder; +var temp, temp2 : integer; + function y:integer; + begin + y:=temp*8+4; + end; + +begin + + fontcolor(246); + + if (NumProfiles>0) then + for temp:=1 to NumProfiles do + begin + fillbox(10,y-1,30,y+6,243); + for temp2:=1 to pmaara do + if (Profileorder[temp2] = temp) then + writefont(18,y,txt(temp2)+'.'); + + end; + +end; + +procedure doscreen; +var temp : integer; + + function y:integer; + begin + y:=temp*8+4; + end; + +begin + + newscreen(7,0); + + temp:=0; + + fontcolor(241); +{ writefont(20,2,lstr(280)+':'); } + writefont(40,3,lstr(34)); + + fontcolor(240); + + for temp:=1 to NumProfiles do + begin + writefont(40,y,profile[temp].name); + end; + + if (NumProfiles65) then value:=65; + + x:=fontlen(lstr(308))+170; + y:=44; + leave:=false; + + repeat + + fillbox(x-2,y-1,318,y+6,245); +{ ok:=true; } + +{ + for temp:=1 to numprofiles do + if (profile[temp].replace = value) and (temp<>index) and (value>0) then ok:=false; +} + + fontcolor(240); + + if (value>0) then + begin + writefont(x,y,nsh(nimet[value],305-x)); + ewritefont(316,y,'#'+txt(value)); + end else writefont(x,y,lstr(9)); + + DrawScreen; + + readkbd(ch,ch2); + + if (ch=#0) then + begin + if (ch2=#71) then value:=1; + if (ch2=#79) then value:=65; + if (ch2=#72) or (ch2=#75) then dec(value); + if (ch2=#80) or (ch2=#77) then inc(value); + if (ch2=#73) then dec(value,10); + if (ch2=#81) then inc(value,10); + end; + + if (value<0) then value:=0; + if (value>65) then value:=65; + +{ if (ch=#13) and (not ok) then ch:=#1; } + + until (ch=#13) or (ch=#27); + + if (ch=#13) then Profile[index].replace:=value; + +end; + + +function question(str1:string):boolean; +var temp : byte; + { tempch,tempch2 : char; } + tempboo : boolean; + str2 : string; + +begin + + str2:=lstr(193); + + alertbox; + + temp:=fontlen(str2)+4; + + fontcolor(241); + writefont(70+temp,110,'('+lch(6,1)+'/'+lch(7,1)+')'); + + inc(temp,25); + + fontcolor(246); + + writefont(70,90,str1); + writefont(70,110,str2); + + getch(70+temp,110,243,ch,ch2); + + tempboo:=false; + if (upcase(ch) = lch(6,1)) then tempboo:=true; + + clearchs; + + question:=tempboo; + +end; + + +procedure welcomescreen(var languagenumber:byte); +var x, index, temp : integer; + full : boolean; + +begin + + full:=false; + if (languagenumber=255) then full:=true; + + if (languagenumber=255) then languagenumber:=1; + for temp:=1 to {numprofiles}5 do Profile[temp].CStyle:=1; + + if (full) then + begin + x:=240; + + NewScreen(6,0); + + fontcolor(240); + ewritefont(x,6,'WELCOME!'); + fontcolor(246); + ewritefont(x,16,'TERVETULOA!'); + fontcolor(247); + ewritefont(x,26,'WILLKOMMEN!'); + fontcolor(240); + ewritefont(x,36,'VŽLKOMMEN!'); + + end else + begin + fillbox(74,41,246,186,248); + fillbox(75,42,245,185,243); + end; + +{ fontcolor(246); + writefont(x,70,'BENVENUTO!'); } + + x:=100; + + fontcolor(240); + writefont(x,50,'PLEASE CHOOSE A LANGUAGE:'); + + x:=155; + + fontcolor(246); + + for temp:=1 to numlanguages do + writefont(x-(fontlen(lnames[temp]) div 2),temp*8+55,lnames[temp]); + + temp:=3; if (not full) then temp:=7; + index:=MakeMenu(112,64,100,8,numlanguages-1,1,243,temp,0); + + if (index=0) then index:=numlanguages; + + languagenumber:=index; + + LoadLanguage(languagenumber); + +end; + + + + +procedure chooseseecomps(var seecomps:byte); +var sch1, sch2 : char; + temp : integer; + index : byte; + leave : boolean; + str1 : string; + +begin + + leave:=false; + + fontcolor(240); + + fillbox(74,79,246,133,248); + fillbox(75,80,245,132,243); + + writefont(85,85,lstr(219)); + fontcolor(241); + writefont(85,95,lstr(150)); + + index:=seecomps; + + repeat + + if (index>NumPl) then + begin + str1:=lstr(index); + fontcolor(240); + end + else + begin + str1:='#'+txt(index)+' '+nsh(nimet[index],115); + fontcolor(246); + end; + + fillbox(85,105,235,125,245); + writefont(95,112,str1); + + drawscreen; + + sch1:=#1; sch2:=#1; + readkbd(sch1,sch2); + + if (sch1='+') or (sch2=#77) or (sch2=#80) then + begin + inc(index); + if (index>NumPl-11) and (index<235) then index:=235; + if (index>240) then index:=1; + end; + + if (sch1='-') or (sch2=#75) or (sch2=#72) then + begin + dec(index); + if (index<235) and (index>Numpl) then index:=NumPl-11; + if (index<1) then index:=240; + end; + + if (sch2=#71) then index:=1; + if (sch2=#79) then index:=240; + + if (sch1=#27) or (sch2=#68) or (sch1=#13) then leave:=true; + + until (leave); + + if (sch1=#13) then seecomps:=index; + + +end; + + + +procedure editprofile(index:integer); +var tempboo, leave2 : boolean; + temp, index2 : integer; + str1, oldstr : string; +begin + + leave2:=false; + index2:=1; + + writeprofile(index,1,-1); + + repeat + + index2:=makemenu(168,13,154,8,8,index2,244,3,9); + + case index2 of + 0 : leave2:=true; + 1 : begin { name edit } + repeat + + tempboo:=true; + oldstr:=Profile[index].name; + + temp:=314-170-fontlen(lstr(304)); + + str1:=getstr(170+fontlen(lstr(304)),12,temp,oldstr,245); + str1:=upstr(str1); + + if (str1<>'') then + begin + for temp:=1 to numprofiles do + if (temp<>index) and (str1 = Profile[temp].name) then tempboo:=false; + + if (tempboo) then Profile[index].name:=str1; + end; + + until (tempboo); + + doscreen; + + end; + + 2 : begin { realname edit } + oldstr:=Profile[index].realname; + + temp:=314-170-fontlen(lstr(305)); + str1:=getstr(170+fontlen(lstr(305)),20,temp,oldstr,245); + str1:=upstr(str1); + + Profile[index].realname:=str1; + + doscreen; + + end; + +{$IFDEF REG} + 3 : choosesuitski(index,0); + 4 : choosesuitski(index,1); + 5 : begin + selectreplace(index); + doscreen; + end; +{$ENDIF} + + 6 : begin + inc(Profile[index].cstyle); + if (lstr(361+(Profile[index].cstyle*40))='?') then Profile[index].cstyle:=0; + emptyedit; + end; + + 7 : begin + inc(Profile[index].skipquali); + if (Profile[index].skipquali>2) then Profile[index].skipquali:=0; + doscreen; + end; + + 8 : begin + if (question(lstr(329))) then DefaultProfile(index,1); + doscreen; + end; + + + + end; { case } + + if (index2 > 0) then writeprofile(index,1,-1); + + until (leave2); + + emptyedit; + +end; + + + + + +procedure profiles; +var oldindex, index, temp, x : integer; + entries : integer; + temp2 : integer; + leave : boolean; + + function getentry:integer; + var temp2 : integer; + begin + temp2:=numprofiles+1; + if (numprofiles>=maxprofiles) then temp2:=numprofiles; + getentry:=temp2; + end; + +begin + + leave:=false; + index:=1; + + doscreen; + + repeat + + entries:=getentry; + +{ writefont(1,102,txt(entries)); + writefont(1,112,txt(maxprofiles)); } + + temp2:=0; + oldindex:=index; + + for temp:=1 to pmaara do + if (Profileorder[temp] = oldindex) then temp2:=temp; + + temp:=temp2; if (oldindex>numprofiles) then temp:=-1; + + writeprofile(index,0,temp); + + index:=makemenu(40,13,122,8,entries,index,243,6,255); + + if ((index=255) and (oldindex>entries)) or (index=254) then leave:=true; + + if (not leave) and (index=255) then { enter pressed } + begin + + if (temp2>0) or (oldindex>numprofiles) then { edit } + begin + if (oldindex>numprofiles) and (numprofiles<>maxprofiles) then + begin + DefaultProfile(oldindex,1); + inc(numprofiles); + doscreen; + end; + + editprofile(oldindex); + end + else { lis„„ pelaaja hypp„„viin } + if (pmaara0) then { poista j„rjestyksest„ } + begin + + if (pmaara>0) then + begin + for temp:=temp2 to pmaara do + ProfileOrder[temp]:=ProfileOrder[temp+1]; + + dec(pmaara); + doorder; + end; + end else { poista profile kokonaan } + begin + + if (question(lstr(328)+': '+Profile[oldindex].name)) then + begin + + if (numprofiles>1) then + begin + dec(numprofiles); + for temp:=oldindex to numprofiles do + Profile[temp]:=Profile[temp+1]; + for temp:=1 to pmaara do + if (profileorder[temp] > oldindex) then dec(profileorder[temp]); + + end + else DefaultProfile(oldindex,1); + end; + + doscreen; + + end; + end; + +{ writefont(160+random(150),random(192),'.'+txt(index)); } + + if (index>100) or (index<0) then index:=oldindex; + + until (leave); + + if (pmaara=0) then + begin + { beep(1); } + ProfileOrder[1]:=1; + pmaara:=1; + end; + + drawscreen; + +{ signupplayers; } + +end; + + +procedure CallSendme(version,regname,regnumber:string; + Today:date;Now:Time;vcode:byte); + +var f2 : text; + str1, realname : string; + sortby : byte; + anywritten : boolean; + apu1, apu2, apu3 : integer; + laskuri, ahi, code : longint; + NumCustoms : integer; + Files : array [0..MaxCustoms] of FileStr; + TempHillOrder : array[0..41] of integer; + checkstrs : array[0..21] of string[12]; + TempCupHills : integer; + + + procedure dotop(fname:string); + begin + assign(f2,fname); + rewrite(f2); + + writeln(f2,'SJ3 v',version,' - ',fname,' - created at ',dayandtime(Today,Now)); + writeln(f2); + writeln(f2,' (please fill in the real full names below!)'); + writeln(f2,toansi(' (example: "LARS76" = Ville K”n”nen )')); + writeln(f2,toansi(' ( "VILLE KONONEN" = Ville K”n”nen )')); + writeln(f2,'.:Jumpers:.'); + writeln(f2); + end; + + procedure findnames(phase:byte); { 1-sendme, 2-extras, 3-customs } + var writtenstr : array[0..200] of string[31]; + numwritten : integer; + temp1, temp2, temp3 : integer; + stop,stop2 : integer; + ok : boolean; + + + begin + + for temp1:=0 to 101 do writtenstr[temp1]:=''; + numwritten:=0; + stop2:=1; + + case phase of + 1 : stop:=40+numprofiles; + 2 : stop:=NumExtrahills; + 3 : begin + stop:=NumCustoms; + stop2:=20; + end; + end; + + for temp1:=1 to stop do + begin + if (phase=3) then LoadCustom(files[temp1],sortby,temphillorder,tempcuphills); + + for temp2:=1 to stop2 do + begin + ok:=true; + case phase of + 1 : case temp1 of + 1..20 : str1:=top[temp1].name; + 21..40 : str1:=HRname(temp1-20); + 41..99 : str1:=Profile[temp1-40].name; + end; + 2 : str1:=HRname(temp1+20); + 3 : str1:=top[temp2+41].name; + end; + + for temp3:=1 to numwritten do + if (str1 = writtenstr[temp3]) then ok:=false; { on jo } + + if (str1[length(str1)]='˙') then ok:=false; { computer jumper } + if (str1 = 'Nobody') and (phase=3) then ok:=false; { customs default } + + realname:=''; + for temp3:=1 to NumProfiles do + if (str1=Profile[temp3].name) then realname:=nmstr(Profile[temp3].realname); + + if (ok) then + begin + writeln(f2,'"',toansi(str1),'" = ',toansi(realname)); + if (numwritten<200) then inc(numwritten); + writtenstr[numwritten]:=str1; + end; + end; + end; + + writeln(f2); + writeln(f2,'- - - - - - - - - - - - - - - - - - - - - - - - - '); + case phase of + 1 : str1:='YWF'; + 2 : str1:='UWF'; + 3 : str1:='IWF'; + end; + str1:=str1+txt(vcode)+'ANYT'; + writeln(f2,'* DO NOT EDIT THIS FILE FROM HERE * C: ',str1); + writeln(f2); + write(f2,'From: '); + + + +{$IFDEF REG} + str1:=regname+' #'+regnumber; +{$ELSE} + str1:='Some nice gentleman who hasn''t yet registered SJ3.'; +{$ENDIF} + + writeln(f2,toansi(str1)); + + end; + + procedure writehead(phase:byte); + var str2:string; + begin + case phase of + 1 : str2:='World_Cup'; + 2 : str2:='Hillrecords'; + 3 : str2:='All_Hill_Index'; + 4 : str2:='Profile_info'; + 5 : str2:='Extra_hills'; + 6 : str2:='Custom_Cups'; + end; + + writeln(f2); + writeln(f2,'.:',str2,':.'); + writeln(f2); + + end; + +begin + + dotop('SENDME.TXT'); + findnames(1); + + writehead(1); + anywritten:=false; + + laskuri:=0; + + laskuri:=svaluestr(str1,11); +{ writeln(f2,laskuri); } + + for apu1:=1 to 20 do + begin + + if (top[apu1].name[length(top[apu1].name)]<>'˙') then + begin + anywritten:=true; + str1:=crypt(top[apu1].score,apu1); + writeln(f2,apu1:2,'.',toansi(top[apu1].name):25,top[apu1].pos:3,'.',top[apu1].score:5,' C: ',str1); + inc(laskuri,svaluestr(str1,apu1)); + inc(laskuri,svaluestr(top[apu1].name,top[apu1].pos)); +{ inc(l,svaluestr(txt(toptulos[a]),b*3-1)); } + end; + end; + + writeln(f2); + write(f2,'Checksum: '); + + if (anywritten) then writeln(f2,((laskuri div 2)+20424) xor 545033) + else writeln(f2,'None.'); + + laskuri:=0; + ahi:=0; { all hill index - prosentti } + + writehead(2); + anywritten:=false; + + for apu1:=1 to NumWCHills do + begin + + str1:=HRname(apu1); + apu2:=hillkr(apu1)*10; + + if (str1[length(str1)]<>'˙') then + begin + anywritten:=true; + str1:=crypt(HRLen(apu1),apu1); + + writeln(f2,upstr(copy(hillname(apu1),1,3)),toansi(HRName(apu1)):25,' ',txtp(HRLen(apu1)):8,' C: ',str1); + + inc(laskuri,svaluestr(str1,apu1)); + inc(laskuri,svaluestr(HRName(apu1),apu1)); + + apu2:=HRLen(apu1); + + end; { else writeln(f2); } + + inc(ahi,longint(apu2)); { eli lis„t„„n joko omalla enkalla tai kriittisell„ } + + end; + + writeln(f2); + write(f2,'Checksum: '); + + if (anywritten) then writeln(f2,((laskuri div 3)+69721) xor 408675) + else writeln(f2,'None.'); + + laskuri:=0; + + for apu1:=1 to NumWChills do inc(laskuri,longint(hillkr(apu1)*10)); + + writehead(3); + +{ + writeln(f2,'ahi: ',ahi); + writeln(f2,'laskuri: ',laskuri); +} + ahi:=round((ahi/laskuri)*10000); + str1:=txt(ahi); insert('.',str1,length(str1)-1); str1:=str1+' %'; + + writeln(f2,str1:10); + + laskuri:=0; + + writeln(f2); + write(f2,'Checksum: '); + + if (ahi>10000) then writeln(f2,((ahi shl 3)+69721) xor 408675) + else writeln(f2,'None.'); + + laskuri:=0; + + writehead(4); + + for apu1:=1 to Numprofiles do + begin + laskuri:=0; + + str1:=Profile[apu1].name; + writeln(f2,toansi(str1)); + inc(laskuri,svaluestr(str1,3)); + + ahi:=Profile[apu1].totaljumps; { ahi temp-k„yt”ss„, „l„ pel„sty } + writeln(f2,' Total_jumps: ',ahi); + inc(laskuri,ahi+3613); + + ahi:=Profile[apu1].wcswon; + writeln(f2,' WC_won: ',ahi); + inc(laskuri,ahi*311); + + ahi:=Profile[apu1].legswon; + writeln(f2,' Legs_won: ',ahi); + inc(laskuri,ahi*133); + + str1:=Profile[apu1].best4result; + writeln(f2,' Best_4H: ',str1); + apu2:=0; while (str1[apu2]<>' ') and (apu20) then writeln(f2,(laskuri+11278) xor 591219) + else writeln(f2,'None.'); + end; + + writeln(f2,'End.'); + + writeln(f2); + writeln(f2,'.END_OF_SENDME.TXT'); + writeln(f2); + writeln(f2,'Please send me to vkononen@cc.hut.fi'); + writeln(f2,'Remember to use your real whole name, no nicknames are allowed.'); + writeln(f2,'The Universal Hiscore List @ http://nomasi.com/sj3'); + + close(f2); + + if (NumExtraHills>0) then { --- EXTRAS! --- } + begin + + dotop('EXTRAS.TXT'); + findnames(2); + + laskuri:=0; + + writehead(5); + + for apu1:=21 to NumExtraHills+20 do + begin + + str1:=HRName(apu1); + if (str1[length(str1)]<>'˙') then + begin + str1:=crypt(HRLen(apu1),apu1); + + writeln(f2,upstr(hillname(apu1)),' K',hillkr(apu1)); + writeln(f2,'C: ',hillcode(apu1)); + + writeln(f2,' ',toansi(HRName(apu1)):25,' ',txtp(HRLen(apu1)):8,' C: ',str1); + + inc(laskuri,svaluestr(str1,apu1)); + inc(laskuri,svaluestr(HRname(apu1),apu1)); + +{ inc(l,svaluestr(txt(MEpituus[a]),a*2+2)); } + + end; { else writeln(f2); } + + end; + + if (laskuri>0) then + begin + writeln(f2); + writeln(f2,'Checksum: ',((laskuri div 3)+69721) xor 408675); + end else writeln(f2,'None.'); + + writeln(f2); + writeln(f2,'.END_OF_EXTRAS.TXT'); + writeln(f2); + + close(f2); + + end; + + FindCustoms(NumCustoms,Files); + + if (NumCustoms>0) then { --- CUSTOMS! --- } + begin + + dotop('CUSTOMS.TXT'); + findnames(3); + + writehead(6); + + for apu1:=1 to NumCustoms do + begin + laskuri:=0; + code:=LoadCustom(files[apu1],sortby,temphillorder,tempcuphills); + + writeln(f2,'File: ',upstr(files[apu1])); + writeln(f2,'Sort: ',sortby); + writeln(f2,'Code: ',code); + + for apu2:=1 to 20 do + if (top[apu2+41].score>0) then + begin + str1:=crypt(top[apu2+41].score,apu2); + checkstrs[apu2]:=str1; + inc(laskuri,svaluestr(str1,apu2)); + inc(laskuri,svaluestr(toansi(top[apu2+41].name),top[apu2+41].pos)); + end; + + write(f2,'Chsm: '); + if (laskuri>0) then writeln(f2,(laskuri+(code div 2)+(sortby*4)+14034) xor 502667) + else writeln(f2,'None.'); + + for apu2:=1 to 20 do + if (top[apu2+41].score>0) then + begin + str1:=checkstrs[apu2]; + write(f2,apu2:2,'.',toansi(top[apu2+41].name):25,top[apu2+41].pos:3,'.',top[apu2+41].score:7,' C: ',str1); + if ((top[apu2+41].time)[1]='(') then writeln(f2,' '+top[apu2+41].time) + else writeln(f2); + + end; + + writeln(f2,'End.'); + writeln(f2); + + end; + + writeln(f2,'.END_OF_CUSTOMS.TXT'); + writeln(f2); + + close(f2); + + end; + + +end; + +procedure drawmainmenu; +var x, y, temp : integer; +begin + +{ fontcolor(240); } + + fillbox(0,0,319,199,0); drawscreen; + LataaPCX('MAIN.PCX',320*200,0,0); + + SiirraStandardiPaletti; + SpecialMainPaletti; + AsetaPaletti; + move(mem[Graffa:0],mem[video:0],64000); + +(* + StartSuit; { lataa ne hyppypukujen v„rit 190-200... } +*) + fontcolor(240); + writefont(170,51,lstr(34)); + fontcolor(241); + + x:=150; + + for temp:=1 to pmaara do + begin + y:=(temp-1)*9+64; + ewritefont(x+12,y,txt(temp)+'.'); + writefont(x+20,y,nimet[NumPl+1-temp]); + +(* + if (reg) then + begin + fillbox(302,y,312,y+6,209+haalarit[temp]); + fillbox(303,y+1,311,y+5,202+haalarit[temp]); + end; +*) + + end; + +{ Fillbox(160,120,319,199,245); } + +end; + + + + + +begin + + NumProfiles:=1; + +end. + diff --git a/SJ3LANG.PAS b/SJ3LANG.PAS new file mode 100644 index 0000000..06abc6f --- /dev/null +++ b/SJ3LANG.PAS @@ -0,0 +1,188 @@ +Unit sj3lang; + +Interface + +{ procedure ResetLanguage; } +procedure LoadLanguage(languageindex:byte); +function lrstr(start,stop:integer):string; +function lnstr(index:integer):string; +function lstr(index:integer):string; +function lch(index,num:integer):char; + +var numlanguages : byte; + lnames : array [0..25] of string[20]; + +Implementation + +uses {crt,}sj3help; + +const NumStr = 599; + +type LangStr = string[59]; + +var plstr : array [0..NumStr] of ^LangStr; + + +function lstr(index:integer):string; +begin + + if (index>=0) and (index<=numstr) then lstr:=plstr[index]^; + +end; + + +function lch(index,num:integer):char; +var str1 : string; +begin + + str1:=lstr(index); + lch:=str1[num]; + +end; + + +function lrstr(start,stop:integer):string; +begin + + lrstr:=lstr(start+random(stop-start+1)); + +end; + +function lnstr(index:integer):string; +var temp : integer; +begin + + temp:=index; + + while (lstr(temp)='?') and (temp0) then { kunhan oikea kieli on l”ytyynty. } + repeat + + if (eof(f1)) then out:=true + else readln(f1,str1); + + + if (str1[1]='*') then out:=true; { kiitti, riitt„„ } + + if (not out) then + begin + + index:=0; + first:=true; + + for temp:=1 to length(str1) do + begin + + if (index>0) then plstr[index]^:=plstr[index]^+str1[temp]; + + if (str1[temp]=':') and (first) then + begin + first:=false; + val(copy(str1,1,temp-1),index,code); + if (code<>0) then index:=0; + if (index>0) then plstr[index]^:=''; { putsaa stringin } + end; + + end; + + end; + + until (out); + + close(f1); + +end; + + +procedure NewLangs; +var temp : integer; +begin + + if (SizeOf(LangStr)*(numstr+1) > MaxAvail) then + begin + writeln ('SJ3 Error: Out of memory when loading languages.'); + readln; + halt; + end; + + for temp:=0 to NumStr do New(plstr[temp]); + +end; + +begin + + NewLangs; + ResetLanguage; + +end. \ No newline at end of file diff --git a/SJ3LIST.PAS b/SJ3LIST.PAS new file mode 100644 index 0000000..ba80709 --- /dev/null +++ b/SJ3LIST.PAS @@ -0,0 +1,458 @@ +Unit SJ3List; + +interface + +type Res_type = record + Pos, Who : integer; + Name : string[30]; + Pts, Len1, Len2 : integer; + end; + +procedure ResetList(omat,kaikki,tyyli:integer;header:string;inv:boolean); +{procedure ResetList(omat,kaikki,tyyli:integer;header:string); } + +{function wisekey(num:integer):integer; } +{function wisekey(phase:byte):byte;} +{procedure Entry(Pos, Who:integer; Name:string; Pts, Len1, Len2:integer;Extra:string); } +function Entry(Num, Pos, Who:integer; Name:string; Pts:longint; Len1, Len2:integer;Extra:string):integer; + +{function whatnow(num:integer;state:byte):integer;} + +implementation + +uses { crt, }sj3unit, sj3graph, sj3help, sj3pcx, sj3lang; + +var X,Y,LastPos,Page, Plus, OwnPlayers, Players, Phase : integer; + columns : byte; + setcol1,setcol2,setcol3 : byte; + status : integer; + InvBack, stop,{ FirstEntry, }FirstPage : boolean; + HeaderStr : string; + +{ +const column : array[1..5] of integer = + (15,20,125,130,160); +} +const columnX : array[1..2,1..6] of integer = + ((24,32,184,199,252,275), +{ (19,23,144,145,150,0)); ? } +{ (19,23,148,149,150,0)); v3.10 } + (19,23,153,154,155,0)); + startY : integer = 23; + +function pluspossibility:integer; +var temp : integer; +begin + + temp:=170 div (players+2); + + if (temp<6) then temp:=6; + if (temp>12) then temp:=12; + + pluspossibility:=temp; + +end; + +procedure NewPage; +var color : byte; + +begin + + case phase of + 0 : begin { Quali } + columns:=1; + plus:=7; + color:=0; + end; + + 1 : begin { Scoreboard } + columns:=1; + plus:=8; + color:=0; + end; + + 2 : begin { 4hills } + columns:=2; + plus:=8; + color:=4; + end; + + 3 : begin { WCStandings } + columns:=2; + plus:=8; + color:=3; + end; + + 4 : begin { king of the hill } + columns:=1; +{ plus:=pluspossibility; } + plus:=8; + color:=2; + setcol3:=246; { ei turkoosia t„nne } + end; + + 5 : begin { Team Cup Standings } + columns:=1; + plus:=10; + color:=1; + end; + + 6 : begin { Team Cup WC standings } + columns:=1; + plus:=10; + color:=3; + end; + + 7 : begin { Stats screens (kokeilu) } + columns:=1; + plus:=200; { vaikuttaa paljon! } + color:=5; + end; + + end; {case} + + if (phase>=0) then + begin + + if (InvBack) then { tota pit„„ tsiigata viel„... } + begin + + DrawHillScreen; + + if (FirstPage) then + begin + SiirraStandardiPaletti; + TallennaAlkuosa(0); + SavytaPaletti(0,40); + AsetaPaletti; + FirstPage:=False; + end; + + DrawAnim(5,2,62); { logo kehiin } + + end + else NewScreen(1,color); + +{ NewScreen(1,color); } + + fontcolor(240); + writefont(30,6,HeaderStr); + + end; + + LastPos:=0; +{ FirstEntry:=True; } + +end; + + +procedure ResetList(omat,kaikki,tyyli:integer;header:string;inv:boolean); +{procedure ResetList(omat,kaikki,tyyli:integer;header:string); } +begin + + X:=0; + Y:=startY; +{ LastPos:=0; } + OwnPlayers:=omat; + Players:=kaikki; + Phase:=tyyli; + HeaderStr:=header; + + InvBack:=inv; + + FirstPage:=True; + + Page:=1; + Plus:=7; + + setcol1:=240; + setcol2:=246; + setcol3:=247; + + columns:=1; { montako saraketta per sivu } + + NewPage; + +end; + + +procedure WaitForKey(from:byte); { 0 - LEAVING, 1 - PAGE_END } +var { tempch, tempch2:char; } + + temp : integer; + good : boolean; + str1 : string; + +begin + + fontcolor(241); + + if (page>1) then ewritefont(319,5,'(-'+lstr(246)); + + str1:=lstr(247); + if (from=0) then str1:=lstr(248); + +{ + writefont(250,1,'FR'+txt(from)); + writefont(250,7,'ST'+txt(status)); + writefont(250,13,'PG'+txt(page)); } + + ewritefont(319,13,str1+'-)'); + + DrawScreen; + + repeat + + temp:=status; + if (from=0) then temp:=-1; + + good:=false; + + readkbd(ch,ch2); + + case ch of + #13, #27 : begin status:=-1; good:=true; end; + + ' ' : begin inc(page); status:=temp; good:=true; end; + + #3 : begin status:=-2; good:=true; end; { CTRL-C } + + end; { case } + + if (ch=#0) then + case ch2 of + #68, #45 : begin status:=-2; good:=true; end; { F10, ALT-X } + + + #77,#81 : begin inc(page); status:=temp; good:=true; end; { PgDn, A_Right } + + #71 : if (page>1) then { HOME } + begin + page:=1; + status:=0; + good:=true; + end; + + #73,#75 : if (page>1) then { PgUp, A_Left } + begin + dec(page); + case phase of + 0 : status:=(page-1)*25; + 1,4 : status:=(page-1)*22; +(* 1 : case page of + 1 : status:=0; + 2 : status:=22; + 3 : status:=42; { ei tarvita, mutta olkoon } + end; *) + 2,3 : status:=(page-1)*44; + 7 : status:=page-1; + end; { case } + good:=true; + end; + + end; { case } + + until (good); + + if (ch=#27) and (phase=3) then + begin + if (quitting(1)=0) then status:=-2 else ch:=#1; + end; + + if (status>=0) then { we need a new screen } + begin + y:=startY; + x:=0; + NewPage; + end; + +end; + + +procedure addy(amount:integer); +var tempch : char; +begin + + if (amount=0) then inc(y,plus) else inc(y,amount); + + if (y>191) then { s„„d„ t„„!!! 192jees? } + if (columns=2) and (x=0) then { nyy kolumni } + begin + y:=startY; + x:=160; + end else + begin { we want new page } + + WaitforKey(1); + + end; +end; + + + +{procedure Entry(Pos, Who:integer; Name:string; Pts, Len1, Len2:integer;Extra:string); } +function Entry(Num, Pos, Who:integer; Name:string; Pts:longint; Len1, Len2:integer;Extra:string):integer; + +var col1, col2, col3 : byte; + str1 : string; + slen1,slen2 : string[5]; + temp : integer; +begin + + col1:=241; col2:=setcol2+5; col3:=setcol3+5; + + if (Who > Players-OwnPlayers) then { meid„n j„tki„ } + begin + col1:=setcol1; + col2:=setcol2; + col3:=setcol3; + end; + +{ + if (extra[1]='K') then + begin + col1:=setcol1; + col2:=setcol1; + col3:=setcol3; + end; } + + fontcolor(col1); + + status:=Num; + + if (Pos>0) then + begin + + fontcolor(col2); + +{ ewritefont(x+columnX[columns,1],y,txt(Num)+' '+txt(Pos)+'.'); } + + if (Pos <> LastPos) then + ewritefont(x+columnX[columns,1],y,txt(Pos)+'.'); + + LastPos:=Pos; + +{ else + if (FirstEntry) then + begin + fontcolor(241); + ewritefont(x+columnX[columns,1],y,txt(Pos)+'.') + end; } + +{ FirstEntry:=False; } + + fontcolor(col1); + + if (columns=2) then Name:=nsh(Name,98); + if (columns=1) then Name:=nsh(Name,122); + + writefont(x+columnX[columns,2],y,Name); + + fontcolor(col1); + + str1:=txtp(Pts); + + case phase of + 3,6 : str1:=txt(Pts); + end; + + ewritefont(x+columnX[columns,3],y,str1); + + slen1:=txtp(Len1); while (length(slen1) < 5) do slen1:='$'+slen1; + slen2:=txtp(Len2); while (length(slen2) < 5) do slen2:='$'+slen2; + + if (Len1 = 0) then str1:='' else + if (Len2 = 0) then str1:='('+slen1+'Ģ)' + else str1:='('+slen1+'-'+slen2+'Ģ)'; + + if (str1<>'') then + begin + fontcolor(col3); + writefont(x+columnX[columns,4],y,str1); + end; + + if (extra<>'') then + for temp:=1 to length(extra) do + begin + case extra[temp] of + 'Q' : begin + fontcolor(col2); + writefont(x+columnX[columns,5],y,'Q'); + end; + 'W' : begin + fontcolor(col3); + writefont(x+columnX[columns,5],y,'Q WC'); + end; + 'I' : begin + fontcolor(249); + str1:=copy(extra,temp+1,length(extra)-temp+1); + writefont(x+columnX[columns,6],y,'INJ-'+str1); + end; + 'K' : begin + fontcolor(col2); + writefont(x+columnX[columns,6],y,lstr(143)); + end; + 'R' : begin + fontcolor(col2); + writefont(x+columnX[columns,6],y,'HR!'); + end; + + end; { case } + + end; + +{ fontcolor(240); + writefont(x+columnX[columns,6],y,extra); } + + if (extra[1]='L') then WaitforKey(0) else AddY(0); + { LAST! } + + end else + begin { v„lihuomautus (ei nimi) tai muu s„hly } + + if (extra[1]='L') then WaitforKey(0) { tekosyy p„„st„ pois } + else + begin { tavallinen v„lihuomautus } + + if (Who>0) then Addy(plus div 2); + + if (status>=0) then { ei ole pois l„hd”ss„ } + begin + fontcolor(246); + writefont(x+columnX[columns,2],y,Name); + + AddY(0); + + if (Who>1) and (status>=0) then AddY(plus div 2); + + end; + end; + end; + + if (Status>=0) then inc(status) + else begin { pois l„hd”ss„ listalta } + + if (invback) then + begin + TakaisinAlkuosa(0); + { SavytaPaletti(0,250); } + AsetaPaletti; + end; + + FirstPage:=True; + + end; + + Entry:=Status; + +end; + +begin + + ResetList(1,NumPl,-1,'',FALSE); + +end. + + + + diff --git a/SJ3PCX.PAS b/SJ3PCX.PAS new file mode 100644 index 0000000..49b5601 --- /dev/null +++ b/SJ3PCX.PAS @@ -0,0 +1,421 @@ +Unit SJ3PCX; + +interface + +procedure AsetaPaletti; +procedure SiirraStandardiPaletti; +procedure SiirraLiiviPois; +procedure MuutaLogo(col:byte); +procedure MuutaReplay(mode:byte); +procedure MuutaMenu(index,col:byte); +procedure TummaLumi; +procedure SavytaPaletti(alue,bkbright:byte); +procedure SpecialMainPaletti; +procedure TallennaAlkuosa(alue:byte); +procedure TakaisinAlkuosa(alue:byte); +procedure LoadSkis(col,phase:byte); +procedure LoadSuit(col,phase:byte); +{procedure startsuit;} + +const NumSkis = 4; + NumSuits = 8; + + +function LataaPCX(name:string;picsize:longint;Page:word;mirror:byte):boolean; + +implementation + +uses Maki; + +const BufSize=2048; + ReplaceMenu : array[0..6*2*3] of byte = +(* ( 0, 0,47, 10,10,54, { sininen tausta} + 47, 0, 0, 54,10,10, { punainen " } + 0,30, 0, 10,35,10, { vihre„ " } *) { standardissa } + (20,20,20, 26,26,26, { harmaa " } + 10,10,10, 15,15,15, { l„hes musta } +(* 30, 0,30, 37, 7,37, { violetti } *) + + 28, 8,24, 34,13,28, { uusi violetti } + 0,24,24, 6,30,30, { turkoosi } + 0,25, 0, 5,30, 5, { KOTH } + 47, 0, 0, 54,10,10, { punainen } + 0); + + ReplaceLogo : array[0..6*4] of byte = + (46,46,63, 32,32,63, { sininen logo } + 51,51,51, 38,38,38, { harmaa logo } + 54,10,10, 47, 0, 0, { punainen valo! } + 10,54,10, 0,47, 0, { vihre„ valo! } + 0); + + Suits : array[0..NumSuits-1,0..3] of byte = + ((0,53,17,53), { Violetti } + (0,55,33,11), { Oranssi } + (0,11,48,18), { Vihre„ } + (0,24,28,63), { Sininen } + (0,63,17,17), { Punainen } + (0,33,33,33), { Harmaa } + (1,10,10,10), { Musta, feidi yl”s } + (0,45,17,63)); { Lila } + + Skis : array[0..NumSkis-1,0..2] of byte = + ((63,63,32), { keltainen default } + (60,60,60), { valkoiset } + (33,60,33), { vihre„t } + (63,43,43)); { punaiset } + + StandardiPaletti : array[0..40*3] of byte = + + (53,17,53, 63, 0, 0, 43,12,43, 63, 0, 0, { 216..219 } + 49,45, 0, 34,31, 0, 63, 0, 0, 56,54,54, { puvut } + 63,63,21, 54,52,10, 42,42,42, 42,20,10, { 224..227 } + 21,21,21, 57,45,38, 63, 0, 0, 63,63,32, { muut } + {23,48,48} + +(* 32,32,32, 43,43,43, 52,52,52, 63,63,63, { lumet } *) + 40,40,41, 48,48,49, 55,55,56, 63,63,63, { lumet } + + 56,13,13, 13,53,13, 23,23,63, 63,23,23, { tuulet ja m„et } + +(* 63,63,63, 31,31,31, 0, 0, 0, 63,63,63, + 46,46,46, 31,31,63, 63,31,31, 63,63,63, + 63,63,46, 31,31,31, 54,52, 0, 25,25,25, + 57,45,38, 44,12,44, 63,17,63, 0, 0, 0, 0); { muu paletti } vanha *) + + { 0, 0,47 } + 63,63,63, 44,44,44, 0, 0, 0, 18,13,34, + 34,13,18, 20,20,20, 63,57, 9, 9,57,63, + {47, 0, 0, 0,30, 0,} + 23,16,43, 43,16,23, 26,26,26, 52,47, 0, + {10,10,54, 54,10,10, 10,35,10 } + 0,47,52, 51,51,51, 38,38,38, 63,63,63, 0); + +var Paletti:Array[0..255,0..2] of byte; + PelastaAlkuosa:Array[0..255*3] of byte; + + +procedure AsetaPaletti;assembler; +asm Mov SI,offset Paletti;Mov DX,03c8h;Mov AX,0;Out DX,AL;Inc DX;Mov CX,768;Rep OutSB;end; + + +procedure TallennaAlkuosa(alue:byte); +var len : byte; +begin + + len:=240; + + if (alue=1) then len:=64; + + move(Paletti,PelastaAlkuosa,len*3); + +end; + + +procedure TakaisinAlkuosa(alue:byte); +var len : byte; +begin + + len:=240; + + if (alue=1) then len:=64; + + move(PelastaAlkuosa,Paletti,len*3); + + Paletti[0,0]:=0; + +end; + + +procedure SiirraLiiviPois; +var temp : byte; +begin + + for temp:=0 to 2 do + Paletti[220,temp]:=Paletti[216,temp]; + + for temp:=0 to 2 do + Paletti[221,temp]:=Paletti[218,temp]; + +end; + +procedure TummaLumi; +var temp, temp2 : byte; +begin + + for temp:=232 to 235 do + for temp2:=0 to 2 do + dec(Paletti[temp,temp2],round(0.4*(Paletti[temp,temp2]-32))); + +end; + +(* +procedure KorostaTeksti(phase:byte); +var temp1, temp2 : integer; +begin + + for temp1:=0 to 223 do + for temp2:=0 to 2 do + begin + Paletti[temp1,temp2]:=Paletti[temp1,temp2]-; + if (Paletti[temp1,temp2] > 63) then Paletti[temp1,temp2]:=63; + end; + + + +end; +*) + +procedure MuutaReplay(mode:byte); +var temp, temp2, col : byte; +begin + + col:=249; + + case mode of + 1 : col:=250; + 2 : col:=253; + 4 : col:=251; +{ 5 : col:=252; } + end; + + for temp:=249 to 253 do + begin + temp2:=byte(temp = col); + + Paletti[temp,0]:=10*temp2; + Paletti[temp,1]:=63*temp2; + Paletti[temp,2]:=20*temp2; + end; + +end; + +procedure MuutaLogo(col:byte); +var temp1, temp2 : byte; +begin + + for temp1:=0 to 1 do + for temp2:=0 to 2 do + Paletti[253+temp1,temp2]:=ReplaceLogo[(col+temp1)*3+temp2]; + +end; + +procedure MuutaMenu(index,col:byte); +var temp : byte; +begin + + for temp:=0 to 2 do + Paletti[242+index,temp]:=ReplaceMenu[(col*2)*3+temp]; + + for temp:=0 to 2 do + Paletti[247+index,temp]:=ReplaceMenu[((col*2)+1)*3+temp]; + +end; + + +procedure SavytaPaletti(alue,bkbright:byte); +var temp1,temp2,start,fin : integer; + r1 : single; +begin + + start:=0; + fin:=239; + + if (alue=1) then begin start:=64; fin:=215; end; + + r1:=bkbright/100; + + for temp1:=start to fin do + for temp2:=0 to 2 do + begin + Paletti[temp1,temp2]:=round(Paletti[temp1,temp2]*r1); + if (Paletti[temp1,temp2] > 63) then Paletti[temp1,temp2]:=63; + end; +end; + +procedure LoadSkis(col,phase:byte); +var target : byte; +begin + + target:=231; + if (phase>0) then target:=phase*5; + if (col<0) or (col>NumSkis-1) then col:=0; + + Paletti[target,0]:=Skis[col,0]; + Paletti[target,1]:=Skis[col,1]; + Paletti[target,2]:=Skis[col,2]; + +end; + +procedure LoadSuit(col,phase:byte); +var w1,w2,w3,target:byte; + temp : integer; + +const nums : array[0..1,0..3] of single = + ((1,0.87,0.75,0.63), + (1,1.50,2.00,2.50)); + +begin + + target:=215; + if (phase>0) then target:=phase*5; + + if (col<0) or (col>NumSuits-1) then col:=0; + + w1:=Suits[col,1]; w2:=Suits[col,2]; w3:=Suits[col,3]; + + for temp:=0 to 3 do + begin + Paletti[target+temp,0]:=round(nums[Suits[col,0],temp]*w1); + Paletti[target+temp,1]:=round(nums[Suits[col,0],temp]*w2); + Paletti[target+temp,2]:=round(nums[Suits[col,0],temp]*w3); + end; + +end; + +(* +procedure startsuit; +var temp : integer; + tempb : byte; +begin + + for tempb:=0 to 6 do + begin + LoadSuit(tempb,0); + for temp:=0 to 2 do Paletti[209+tempb,temp]:=Paletti[216,temp]; + for temp:=0 to 2 do Paletti[202+tempb,temp]:=Paletti[218,temp]; + end; + + AsetaPaletti; + +end; +*) + +procedure SpecialMainPaletti; +begin + + Paletti[243,0]:=18; + Paletti[243,1]:=13; + Paletti[243,2]:=34; + + Paletti[248,0]:=23; + Paletti[248,1]:=16; + Paletti[248,2]:=43; + + MuutaMenu(3,0); + +end; + + + + +procedure SiirraStandardiPaletti; +var temp1,temp2 : integer; +begin + + for temp1:=0 to 39 do + for temp2:=0 to 2 do + Paletti[216+temp1,temp2]:=StandardiPaletti[temp1*3+temp2]; + +end; + + +function LataaPCX(name:string;picsize:longint;Page:word;mirror:byte):boolean; + +var DiskBuffer:Pointer; + f:file; + bp:integer; + pc:word; + wp:longint; + i : integer; + b1,b2:byte; + +function GetNextByte:byte; +begin + if (bp>=BufSize) then + begin + bp:=0; + if(Filesize(f)-filepos(f)0) then + begin + temp:=(pc mod Maki.XSize); + x:=671-temp; + if (x<0) then x:=1024+x; + mem[Video:((pc div Maki.XSize)*Maki.XSize)+x]:=b; + end else mem[Video:pc]:=b; + + inc(wp); + inc(pc); + + if (pc>=Maki.Sivukoko) then + begin + pc:=0; + Maki.PaivitaKirjoitusSivu; + inc(Page); + Maki.LukitseKirjoitusSivu(Page); + end; +end; + + +begin + + LataaPCX:=True; +{ GetMem(DiskBuffer,BufSize); } + GetMem(DiskBuffer,65528); + assign(f,name); + {$I-} + reset(f,1); + {$I+} + if (IOResult<>0) then + begin + FreeMem(Diskbuffer,65528); + AsetaMoodi($3); + writeln('SJ3 Error: Can''t find file ',name,'. Exiting... '); + Halt; + end; + + seek(f,128); + if (IOresult<>0) or (ofs(DiskBuffer^)<>0) then LataaPCX:=false else + begin + wp:=0; { "write position" } + bp:=BufSize; { "buffer position" } + pc:=0; { "page counter" } + Maki.LukitseKirjoitusSivu(Page); + while(wp=192) then + begin {pakkaus} + b2:=GetNextByte; + for i:=1 to b1-192 do PutByte(b2); + end else PutByte(b1); + end; + + GetNextByte; + + for pc:=0 to 767 do Paletti[pc div 3,pc mod 3]:=GetNextByte shr 2; + + close(f); + end; + + Maki.PaivitaKirjoitusSivu; + FreeMem(DiskBuffer,65528); + +end; + + +begin +end. + diff --git a/SJ3REPL.PAS b/SJ3REPL.PAS new file mode 100644 index 0000000..0baf54f --- /dev/null +++ b/SJ3REPL.PAS @@ -0,0 +1,709 @@ +Unit SJ3Repl; + +interface + +procedure replays(start:boolean;version:string;gdetail:byte); + +implementation + +uses {crt,} WinDos,SJ3Unit, SJ3info, SJ3Help, SJ3PCX, SJ3Graph, Tuuli, Maki, Lumi, SJ3lang; + + +procedure replays; +var filenames : array[0..500] of string[12]; + numreplays : integer; + f1 : text; + oldindex, temp, index : integer; +{ tempch,tempch2 : char; } + intro:boolean; + + result : byte; + + Acthill : hill_type; + + StartX, StartY, MaxTurns, Nytmaki, + Lmaara, Realhp, FLStart, FLStop, HRx, HRy, startgate : integer; + suitcolor, skicolor : byte; + Author, Name : NameStr; + When : TimeStr; + HillFilename : string[12]; + laskuri,check,mycheck : longint; + RD : array[0..4,0..1000] of byte; + mcliivi : boolean; + +{ TempVideo : EPtr; } + + + procedure playreplay; + var temp, JumperAnim, SkiAnim, hp : integer; + wind, Rturns : integer; + Mode, OldMode : integer; + speed : byte; + place : word; + move : shortint; + + str1 : string; + + x, y, fx, fy, sx, sy, deltax, deltay : integer; + keulax, keulay : integer; + + kr : integer; + + XY : array[0..1,0..1000] of integer; +{ ch, ch2 : char; } + + function txts(phase:byte):string; + var str1 : string; + begin + str1:=lstr(343); + case phase of + 1 : str1:='50%'; + 2 : str1:='75%'; + 3 : str1:='100%'; + 4 : str1:='150%'; + 5 : str1:='200%'; + end; + + txts:=str1; + end; + + procedure introbox(phase:byte); + var ix,iy : integer; + { newch, newch2 : char; } + begin + + ix:=30; + iy:=30; + + case phase of + 0,1,2,3 : iy:=140; + end; + +{ fillbox(ix-3,iy-4,ix+245,iy+35,254); } + fillbox(ix-7,iy-7,ix+261,iy+32,248); + fillbox(ix-6,iy-6,ix+260,iy+31,243); +{ fillarea(ix-6,iy-6,ix+260,iy+31,63); } + + fontcolor(246); + writefont(ix,iy,lstr(360+phase*2)); + writefont(ix,iy+10,lstr(361+phase*2)); + + waitforkey3(ix+246,iy+21,ch); + + end; + + begin + + if (IOResult=0) then + begin + + { LoadInfo(nytmaki,ActHill); } + + kr:=acthill.kr; + + ch:=#1; + + X:=StartX; + Y:=StartY; + + for temp:=0 to MaxTurns do + begin + X:=X+RD[0,temp]-128; + Y:=Y+RD[1,temp]-128; + XY[0,temp]:=X; + XY[1,temp]:=Y; + end; + + Speed:=3; { normaali nopeus } + Place:=0; + RTurns:=0; + + Mode:=3; { 0 - pause, 1 - play fwd, 2 - play rew, + 3 - play once then pause + 4 - thru once (speed change) + 5 - one step forward } + +{ LStyle:=Random(2)*Random(2); + LStyle:=1; } + + if (gdetail=1) then LMaara:=0; + + VieLmaara(Lmaara); + + if (intro) then mode:=1; + + LoadHill(temp,nytmaki,Acthill); + + Maki.X:=0; + Maki.Y:=0; + + DrawHillScreen; + + SiirraStandardiPaletti; + if (LMaara>1000) then TummaLumi; + + Loadsuit(suitcolor,0); + Loadskis(skicolor,0); + + if (not mcliivi) then SiirraLiiviPois; + + MuutaReplay(mode); + + AsetaPaletti; + + sx:=0; sy:=0; fx:=0; fy:=0; + + KeulaX:=XY[0,FLStart]; + KeulaY:=XY[1,FLStart]; + + X:=StartX; + Y:=StartY; + JumperAnim:=RD[2,RTurns]; + SkiAnim:=RD[3,RTurns]; + Wind:=RD[4,RTurns]-128; + + repeat { replayluuppi } + + if (mode>0) then + begin + + fx:=x; + fy:=y; + + ch:=#1; ch2:=#1; + +{ temp:=0; + + case mode of + 1 : temp:=1; + 2 : temp:=-1; + end; + + X:=X+temp*(RD[0,RTurns]-128); + Y:=Y+temp*(RD[1,RTurns]-128); } + + if (intro) then + case Rturns of + 1 : begin introbox(0); introbox(1); introbox(2); end; + 100 : introbox(3); + 223 : introbox(4); + 257 : introbox(5); + 420 : introbox(6); + 550 : begin introbox(7); introbox(8); introbox(9); end; + 822 : begin introbox(10); ch:=#27; end; + end; + + X:=XY[0,RTurns]; + Y:=XY[1,RTurns]; + + JumperAnim:=RD[2,RTurns]; + SkiAnim:=RD[3,RTurns]; + Wind:=RD[4,RTurns]-128; + + DeltaX:=Maki.X; + DeltaY:=Maki.Y; + + if (x>=160) and (x<864) then sx:=x-160; + if (y>=100) and (y<412) then sy:=y-100; + + Maki.X:=sx; + Maki.Y:=sy; + + if (Maki.X>704) then Maki.X:=704; + if (Maki.Y>312) then Maki.Y:=312; + if (Maki.X<0) then Maki.X:=0; + if (Maki.Y<0) then Maki.Y:=0; + + Maki.Tulosta; + + DrawLumi(DeltaX-Maki.X,DeltaY-Maki.Y,Tuuli.Value,LMaara,true); + + if (hrx>0) then DrawAnim(hrx-Maki.X,hry-Maki.Y,68); { m„kienkkakeppi } + + DrawAnim(x-Maki.X,y-Maki.Y-2,JumperAnim); + DrawAnim(x-Maki.X,y-Maki.Y-1,SkiAnim); + +{ EWritefont(308,69,'RTURNS '+txt(RTurns)); } + + if (not intro) then + begin + + DrawAnim(227,2,64); + + Fontcolor(246); + + if { (mode=3) or } (rturns mod 30 > 15) then + writefont(2,2,'R'); + + FontColor(240); + + + EWritefont(308,9,acthill.name+' K'+txt(acthill.kr)); + EWritefont(308,19,author); +{ Ewritefont(308,29,when); } + + + { EWritefont(308,29,'MTURNS '+txt(MaxTurns)); } + + DrawAnim(150,30,69); +{ DrawAnim(250,62,70); } + +{ temp:=mode; } + + if (mode<>oldmode) then MuutaReplay(mode); + + str1:='0.00'; hp:=0; + + if (Rturns>FLstart) then + begin + hp:=round(nsqrt(sqr(longint(X-KeulaX))+sqr(longint(Y-KeulaY)))*acthill.pk*0.5)*5; + temp:=Rturns-FLstart; + if (Rturns>FlStop) then + begin + temp:=FlStop-FLstart; + hp:=realhp; + end; + str(round(temp*10/7),str1); + + while (length(str1) < 3) do str1:='0'+str1; + insert('.',str1,length(str1)-1); + +{ hp:=round(nsqrt((matka*matka)+(kkor*kkor))*acthill.pk*0.5)*5; } + end; + + Fontcolor(247); + + EWritefont(309,29,lstr(340)+' '+str1); + EWritefont(309,39,lstr(341)+' '+txtp(hp)); + EWritefont(309,49,lstr(342)+' '+txts(speed)); + str1:=''; + case startgate of + 1..5 : str1:=lstr(26+startgate); + end; + + if (startgate>10) then str1:=lstr(58)+' '+txt(100-startgate); + + if (str1<>'') then EWritefont(309,59,str1); + +{ EWritefont(309,59,txt(mode)); } + + end else Fontcolor(247); { tuulta varten vaan } + + Tuuli.Value:=wind; + Tuuli.Piirra; + + end; + + if (mode=3) then mode:=0; +{ if (mode>3) then mode:=3; } + + OldMode:=mode; + + if (mode>3) then mode:=3; + + if (keypressed) then + begin + readkbd(ch,ch2); + if {(ch2=#80) or (ch2=#72) or} (upcase(ch)='P') then mode:=3; + if (ch2=#77) then if (mode=1) then mode:=3 else mode:=1; + if (ch2=#75) then if (mode=2) then mode:=3 else mode:=2; + if (ch2=#68) then ch:=#27; + + if (ch=' ') and (mode=0) then mode:=5; + + temp:=speed; + if ((ch='+') or (ch2=#80)) and (speed<5) then inc(speed); + if ((ch='-') or (ch2=#72)) and (speed>0) then dec(speed); + + if (temp<>speed) and (mode=0) then mode:=4; + + if (intro) then begin mode:=oldmode; speed:=temp; end; + + end; + + case mode of +{ 1 : if (oldmode<>2) then inc(Rturns); + 2 : if (oldmode<>1) then dec(Rturns); } + 1 : if (oldmode<>2) then inc(Place); + 2 : if (oldmode<>1) then inc(Place); + end; + + move:=0; + + temp:=speed; + + if (speed=0) then { custom speed } + begin + temp:=3; +{ if (Rturns > FLStart) then temp:=3; } + if (abs(Rturns-FlStart) < 40) or + (abs(Rturns-FlStop) < 40) then temp:=2; + if (abs(Rturns-FlStart) < 20) { or + (abs(Rturns-FlStop) < 15) } then temp:=1; + end; + + + case temp of + 1 : move:=byte(place mod 4 = 0); + 2 : move:=place mod 2; + 3 : move:=1; + 4 : move:=1 + place mod 2; + 5 : move:=2; + end; + + if (place>999) then place:=0; + + case mode of + 1 : inc(Rturns,move); + 2 : dec(Rturns,move); + 5 : inc(Rturns); + end; + + if (mode=5) then mode:=3; { one step } + + if (Rturns<0) then begin mode:=3; RTurns:=0; end; + if (Rturns>MaxTurns) then begin mode:=3; RTurns:=MaxTurns; end; + + WaitRaster; + + AsetaPaletti; + + Maki.Paivitaruutu; + + until (ch=#27); + + end; + + clearchs; + +end; + + + + + procedure findreplays; + var DirInfo : TSearchRec; + Attr : word; + temp : integer; + begin + + NumReplays:=0; + + for temp:=0 to 100 do filenames[temp]:=''; + + Attr:=0; + + FindFirst('*.SJR', Attr, DirInfo); + + while (DosError = 0) and (NumReplays < 100) do + begin + + inc(NumReplays); + + temp:=0; + + while (DirInfo.Name[temp]<>'.') do + begin + filenames[NumReplays]:=filenames[NumReplays]+DirInfo.Name[temp]; + inc(temp); + end; + + FindNext(DirInfo); + + end; + + DosError:=0; + + end; + + procedure readreplayinfo; + var tempch : char; { ok1 } + temp,temp2 : integer; + begin + + readln(f1,startx); readln(f1,starty); + + readln(f1,maxturns); + readln(f1,nytmaki); + readln(f1,hillfilename); + readln(f1,laskuri); { profile } + readln(f1,lmaara); + readln(f1,realhp); + readln(f1,FLStart); + readln(f1,FLStop); + readln(f1,HRx); readln(f1,HRy); + readln(f1,suitcolor); readln(f1,skicolor); + + readln(f1,author); + readln(f1,name); + readln(f1,when); + + readln(f1,temp); + mcliivi:=boolean(temp); + + readln(f1,startgate); + readln(f1,mycheck); + + tempch:=#1; + + while (tempch<>'*') do + read(f1,tempch); + + for temp:=0 to 1000 do + for temp2:=0 to 4 do + begin + read(f1,tempch); + RD[temp2,temp]:=byte(tempch); + end; + + close(f1); + + end; + + + function countcheck:longint; + var temp : longint; + begin + temp:=0; + inc(temp,Startx*2+Starty); + inc(temp,maxturns*3); + if (nytmaki<=numwchills) then inc(temp,nytmaki*131); + inc(temp,valuestr(hillfilename,3)*3); + inc(temp,Acthill.profile); + inc(temp,(realhp+2)*69); + inc(temp,flstart+flstop); + inc(temp,(HRx+HRy)*2); + inc(temp,valuestr(author,2)); + inc(temp,startgate*1412); + + countcheck:=temp xor 3675433; + end; + + + procedure clearscreen; + begin + fillbox(145,50,319,199,243); + fillbox(128,70,145,199,243); + + fillarea(128,70,145,199,64); + fillarea(145,50,319,199,64); + + fontcolor(241); + writefont(170,51,lstr(25)+':'); + writefont(150,185,lstr(146)); + end; + + procedure noreplays; + begin + clearscreen; + fontcolor(246); + writefont(170,80,lstr(290)); + getch(177+fontlen(lstr(290)),80,243,ch,ch2); + DrawScreen; + end; + +{ + procedure savedscreen; + begin + + move(mem[TempVideo:0],mem[Video:0],64000); + TakaisinAlkuosa(0); + SiirraStandardiPaletti; + SpecialMainPaletti; + AsetaPaletti; + + end; +} + +begin + +if (start) then + begin + assign(f1,'INTRO.SJR'); + {$I-} + reset(f1); + + result:=0; + + intro:=true; + + if (IOResult<>0) then result:=1 + else readreplayinfo; + + {$I+} + if (result=0) then + begin + LoadInfo(nytmaki,Acthill); + playreplay; + end; + + end else + begin + + FindReplays; + + oldindex:=0; + + + { + Alloclarge(TempVideo,64000); + move(mem[Video:0],mem[TempVideo:0],64000); + TallennaAlkuosa(0); + } + + if (NumReplays>0) then + begin + + index:=1; + + repeat + + if (oldindex<>index) then + begin + + result:=0; intro:=false; + + assign(f1,filenames[index]+'.SJR'); + {$I-} + reset(f1); + + if (upstr(filenames[index])='INTRO') then intro:=true; + + if (IOResult<>0) then result:=1 + else readreplayinfo; + + {$I+} + + if (nytmaki>NumWCHills) and (result=0) then + begin + result:=2; + temp:=0; + + if (NumExtraHills>0) then + while (tempmycheck) then result:=3; + + if (result<>0) then + begin + author:='Unknown'; + name:='Not a valid replay.'; + when:='-'; + acthill.name:='?'; + case result of + 1 : acthill.name:='File didn''t open.'; + 2 : acthill.name:='Extra Hill Not Found.'; + 3 : acthill.name:='Checksum mismatch.'; + end; + + acthill.kr:=-1; + end; + + clearscreen; + + writefont(272,85,txt(index)+'/'+txt(numreplays)); + + writefont(150,106,lstr(291)); + writefont(150,126,lstr(292)); + writefont(150,146,lstr(294)); + writefont(150,71,lstr(293)); + writefont(170,163,when); + + if (acthill.kr > 0) then fontcolor(246) + else fontcolor(241); + + fillbox(163,78,257,98,248); + fillbox(164,79,256,97,243); + writefont(170,85,filenames[index]); + fontcolor(240); + writefont(170,115,author); + writefont(170,135,name); + if (acthill.kr > 0) then writefont(170,155,acthill.name+' K'+txt(acthill.kr)) + else writefont(170,155,acthill.name); +{ writefont(170,168,txt(countcheck)); + writefont(170,173,txt(mycheck)); } + + drawscreen; + + end; + + ch:=#1; ch2:=#1; oldindex:=index; + + readkbd(ch,ch2); + + if (ch2=#77) or (ch2=#80) or (ch=' ') or (ch='+') then inc(index); + if (ch2=#75) or (ch2=#72) or (ch='-') then dec(index); + if (ch2=#68) then ch:=#27; + + if (ch=#13) and (result=0) then + begin + playreplay; + oldindex:=0; { piirt„„ ruudun uudestaan sitten } + drawmainmenu; + mainmenutext(0,version); + { savedscreen; } + end; + + if (ch2=#83) then { delete! } + begin + if (mightdelete(filenames[index]+'.SJR') = 0) then + begin + FindReplays; + end; + ch:=#1; + oldindex:=0; + drawmainmenu; + mainmenutext(0,version); + + if (numreplays=0) then + begin + noreplays; + ch:=#27; + end; + end; + + if (index<1) then index:=NumReplays; + if (index>NumReplays) then index:=1; + + until (ch=#27); + + end else + begin + noreplays; + + end; + + { freemem(TempVideo,64000); } + end; + +end; + + + + + + + + + + + + + +begin + + +end. \ No newline at end of file diff --git a/SJ3TABLE.PAS b/SJ3TABLE.PAS new file mode 100644 index 0000000..b713d7d --- /dev/null +++ b/SJ3TABLE.PAS @@ -0,0 +1,310 @@ +Unit SJ3Table; + +interface + +function FindLanding(kulma:integer):integer; +function ParruAnim(var kulmalaskuri:integer):byte; +function SuksiLaskussa(kulma:integer):byte; +function LaskuAsento(suksi:byte):byte; +function LaskuAnim(kulma:integer;style:byte):byte; +Function PonnAnim(var ponnphase:byte):byte; +Function LentoAnim(kulma1:integer):byte; +Function SuksiLennossa(kulmas:integer):byte; { k„rki yl”sp„in olevia suksia } +function jumprisk(kulma:integer):longint; + + +implementation + +function FindLanding(kulma:integer):integer; +var temp : integer; +begin + + temp:=25; { korkeus, jonka j„lkeen alastulo on aloitettava } + +{ temp:=35-MakiKulma(x) div 2; } + + case kulma of + 0..9 : temp:=50; + 10..20 : temp:=50; + 21..24 : temp:=50; + 25 : temp:=48; + 26 : temp:=45; + 27 : temp:=40; + 28 : temp:=36; + 29 : temp:=32; + 30 : temp:=28; + 31 : temp:=24; + 32 : temp:=22; + 33..39 : temp:=20; + 40..60 : temp:=15; + end; + + FindLanding:=temp; + +end; + + +function jumprisk(kulma:integer):longint; +var temp : longint; +begin + + temp:=1; + + case kulma of + 31 : inc(temp,1); + 30 : inc(temp,2); + 29 : inc(temp,4); + 28 : inc(temp,7); + 27 : inc(temp,12); + 26 : inc(temp,19); + 25 : inc(temp,29); + 24 : inc(temp,41); + 23 : inc(temp,54); + 22 : inc(temp,70); + 21 : inc(temp,90); + 20 : inc(temp,120); + 19 : inc(temp,200); + 18 : inc(temp,300); + 17 : inc(temp,500); + 16 : inc(temp,700); + 0..15 : inc(temp,950); + end; + + jumprisk:=temp; + +end; + + + +function ParruAnim(var kulmalaskuri:integer):byte; +var JumperAnim : byte; +begin + + case kulmalaskuri of + 1000..1012 : JumperAnim:=169; + 1013..1033 : JumperAnim:=170; + 1034..1046 : JumperAnim:=169; + 1047..1059 : JumperAnim:=164; + 1060..1072 : JumperAnim:=171; + 1073..1093 : JumperAnim:=172; + 1094..1106 : JumperAnim:=171; + 1107 : KulmaLaskuri:=0; + + 2000..2012 : JumperAnim:=173; + 2013..2025 : JumperAnim:=174; + 2026..2036 : JumperAnim:=175; + 2037..2047 : JumperAnim:=174; + 2048..2058 : JumperAnim:=175; + 2059..2071 : JumperAnim:=174; + 2072..2082 : JumperAnim:=173; + 2083 : KulmaLaskuri:=0; + + 3000..3024 : JumperAnim:=176; + 3025..3037 : JumperAnim:=177; + 3038..3200 : JumperAnim:=164; + 3201 : KulmaLaskuri:=0; +{ + 4000..4024 : JumperAnim:=173; + 4025..4033 : JumperAnim:=178; + 4034..4054 : JumperAnim:=173; + 4055..4063 : JumperAnim:=178; + 4064..4084 : JumperAnim:=173; + 4085 : KulmaLaskuri:=0; + } + + end; + + if (kulmalaskuri=0) then JumperAnim:=164; + + ParruAnim:=JumperAnim; + +end; + + + +function SuksiLaskussa(kulma:integer):byte; +var value:byte; + +begin + + value:=0; + + case kulma of + 4..6 : value:=1; + 7..9 : value:=2; + 10..12 : value:=3; + 13..16 : value:=4; + 17..19 : value:=5; + 20..24 : value:=6; + 25..28 : value:=7; +{ 29..32 : value:=9; + 33..39 : value:=10; } + 29..33 : value:=8; + 34..39 : value:=9; + + 40..48 : value:=10; + 49..64 : value:=11; + 65..90 : value:=12; + +{ 2..12 : value:=temp; } + end; + + SuksiLaskussa:=value+71; + +end; + + + +function LaskuAsento(suksi:byte):byte; +var value : byte; +begin + + value:=0; + + suksi:=suksi-71; + + case suksi of + 2..4 : value:=1; + 5..6 : value:=2; + 7..9 : value:=3; + 10..12 : value:=4; + end; + +{ end; } + + LaskuAsento:=value+101; + +end; + + + +function LaskuAnim(kulma:integer;style:byte):byte; +var value : byte; +begin + + value:=127; + + if (kulma>70) then kulma:=kulma-71; { jos se on suksianim } + + case kulma of + 0..4 : value:=127; + 5..6 : value:=126; + 7 : value:=125; + 8..12 : value:=124; + end; + + if (style=2) then value:=value+6; + + LaskuAnim:=value; + +end; + + + + +Function PonnAnim(var ponnphase:byte):byte; +var value : byte; +begin + + value:=117; + + case (ponnphase) of + 4..6 : value:=118; + 7..9 : value:=119; + 10..13 : value:=120; + 14..17 : value:=121; + 18..20 : value:=122; + 21..23 : value:=123; + 24..50 : value:=112; { TARKISTA TŽMŽ!!! } + end; + + inc(ponnphase); + + PonnAnim:=value; + +end; + + + +Function LentoAnim(kulma1:integer):byte; +var value:byte; +begin + + value:=0; + +(* + case (kulma1) of + 50..59 : value:=1; + 60..74 : value:=2; + 75..89 : value:=3; + 90..114 : value:=4; + 115..139 : value:=5; + 140..174 : value:=6; + 175..1000 : value:=7; + end; { ap } +*) + + case (kulma1) of + 50..61 : value:=1; + 62..76 : value:=2; + 77..95 : value:=3; + 96..119 : value:=4; + 120..149 : value:=5; + 150..186 : value:=6; + 187..1000 : value:=7; + end; + + LentoAnim:=value+106; + +end; + + + +Function SuksiLennossa(kulmas:integer):byte; { k„rki yl”sp„in olevia suksia } +var value:byte; +begin + + value:=0; + + case (kulmas) of + -900..-258 : value:=19; + -257..-216 : value:=18; + -215..-176 : value:=17; + -175..-136 : value:=16; + -135..-97 : value:=15; + -96..-59 : value:=14; + -58..-20 : value:=13; + + 20..58 : value:=1; + 59..96 : value:=2; + 97..135 : value:=3; + 136..175 : value:=4; + 176..215 : value:=5; + 216..257 : value:=6; + +{ 258..298 : value:=93; + 299..340 : value:=94; + 341..384 : value:=95; + 385..429 : value:=96; + 430..475 : value:=97; + 476..1000 : value:=98; } + end; + + SuksiLennossa:=value+71; + + (* + SkiValues:=54; { suora suksi v„liaikaisesti } + *) + +end; + + + + + + + + +begin + +end. \ No newline at end of file diff --git a/SJ3UNIT.PAS b/SJ3UNIT.PAS new file mode 100644 index 0000000..ae52045 --- /dev/null +++ b/SJ3UNIT.PAS @@ -0,0 +1,3289 @@ +Unit SJ3UNIT; + + {$I REGSTAT.PAS} + +interface + +const NumPl = 75; { montako pelaajaa on ylip„„t„„n } + NumTeams = 15; + MaxOwnPl = 10; { montako omaa pelaajaa voi olla } + NumWCHills = 20; { montako m„ke„ World Cupissa } + MaxExtraHills = 1000; { montako extra m„ke„ voi olla. CHECK!!! } + MaxCustoms = 200; { montako custom hill filea .SJC voi olla } + + HexCh : array[0..15] of char = + ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); + + WCpoints : array[1..30] of byte = + (100,80,60,50,45,40,36,32,29,26,24,22,20,18,16, + 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1); +{ + Teampoints : array[1..6] of byte = + (10,6,4,3,2,1); +} + + Teampoints : array[1..8] of integer = + (400,350,300,250, + 200,150,100,50); + + +type Stat_type = record + CompPos : byte; + WCPos : byte; + CompPts : integer; + Round1Pos : byte; + RoundPts : array [0..2] of longint; + RoundLen : array [0..2] of integer; + Reason : array [0..2] of byte; + end; + + HillStr = string[25]; + TimeStr = string[22]; + NameStr = string[30]; + FileStr = string[8]; + + + +{ + Key_type = record + JUMP1, JUMP2, + RIGHT1, RIGHT2, + LEFT1, LEFT2, + TELE1, TELE2, + TWO1, TWO2 : char; + end; +} + + Key_type = record + A,B : char; + end; + + Hill_type = record + Name : string[25]; + Author : string[30]; + Kr : integer; + FrIndex, BkIndex : string[3]; + BkBright, BkMirror, VxFinal : byte; + Pk, PlSave : single; + Profile : longint; + HRName : NameStr; + HRLen : integer; + HRTime : TimeStr; + end; + + Hillinfo_type = record + Name : HillStr; + Kr : integer; + HRName : NameStr; + HRLen : integer; + HRTime : TimeStr; + end; + +(* + Hillrec = record + Name : NameStr; + Len : integer; + Time : TimeStr; + end; +*) + + Hiscore = record + Name : NameStr; + Pos : byte; + Score : Longint; + Time : TimeStr; + end; + + Date = record + Year,Month,Day,DayofWeek : Word; + end; + + Time = record + Hour, Minute, Second, Sec100 : Word; + end; + +var NumExtraHills, NumHills, Vcode : byte; + +{function getch(xx,yy:integer;bkcolor:byte):char;} +procedure getch(xx,yy:integer;bkcolor:byte;var tempch,tempch2:char); +function getstr(xx,yy,maxlength:integer;oldstr:string;bkcolor:byte):string; +function getstr2(xx,yy,maxchars:integer;oldstr:string;bkcolor:byte):string; + +procedure lopputext(version:string;a1,a2:Time); + +function MakeMenu(x,y,length,height,items,index:integer;bgcolor,phase,tab:byte):integer; + +function LoadHill(var KeulaX:integer;nytmaki:integer;Acthill:hill_type):byte; + +Function waitforkey3(xx,yy:integer;var ch:char):boolean; +procedure teamwarning; + +procedure newunregtext; + +{procedure mainmenutext(phase:byte;reg:boolean); } +procedure mainmenutext(phase:byte;version:string); +procedure unregendtext; +procedure newregtext(regname,regnumber:string); +procedure regendtext(regname,regnumber:string); + +function makeletter(temp:integer):char; + +procedure resultbox(phase:byte;result:integer); + +function hillfile(nyt:integer):string; + +{ procedure WriteExtraHillHR(index:integer);} +function fexist(filename:string):boolean; + +procedure CheckExtraHills; +procedure LoadHillInfo; +procedure GetNow(var Now:Time); + +function LoadInfo(nytmaki:integer; + var hill:hill_type):byte; + +procedure choosewindplace(var place:byte); + +procedure SetupItem(index,screen,entries:byte;str1:string); + +procedure HillMaker(phase:byte); +{ procedure HillEditor(phase:byte); } + +procedure setgoals; +function loadgoal(num:integer):integer; + +function hillkr(nytmaki:integer):integer; +function hillname(nytmaki:integer):HillStr; +function hillcode(nytmaki:integer):longint; + +function HRname(nytmaki:integer):NameStr; +function HRLen(nytmaki:integer):integer; +function HRTime(nytmaki:integer):TimeStr; + +procedure SetHRinfo(nytmaki:integer;name:NameStr;len:integer;time:TimeStr); + +function replayinfo(var filename, author, name:string;nytmaki,hp:integer):byte; + + +procedure WriteExtras; +procedure ReadExtras; + +function quitting(phase:byte):byte; +function dayandtime(D1:Date;T1:Time):string; + +Function Luehaalarit(index,col:byte):byte; +function injured:shortint; + +function keyname(chw:word):string; +function kword(ch1,ch2:char):word; +procedure DefaultKeys(var K:array of word); +procedure ConfigureKeys(var K:array of word); + +function crypt(arvo:longint;jarj:integer):string; +function uncrypt(str0:string;jarj:integer):longint; + +function valuestr(str0:string;arvo:integer):word; +function svaluestr(str0:string;arvo:integer):word; +function choosehill(mmaara:byte):byte; +procedure kothchallenge(x:integer;kothpack:byte); +function kothtitle(temp:integer):string; + +function lengthpoint(kr:integer):integer; + +function mightdelete(filestr:string):byte; + +procedure DoCoachCorner(height,kulmalaskuri:integer;grade,ponn,style:byte); + +{procedure DrawLumi(delx,dely,wind:integer;lmaara:word); } +procedure DrawLumi(delx,dely,wind:integer;lmaara:word;draw:boolean); + +procedure makevcode(version:string;reg:boolean); + +(* +function ReadKey : char { in lieu of Crt.ReadKey } ; +*) + +procedure readkbd(var tempch,tempch2:char); +function KeyPressed : boolean; + +(* +procedure Textcolor(col:byte); +procedure Textbackground(col:byte); +procedure GotoXY(x,y:integer); +procedure Window(x1,y1,x2,y2:integer); +procedure clrscr; +*) + + +implementation + +uses crt, dos, windos, sj3help, sj3graph, sj3lang, maki, lumi, sj3pcx; + +{var osote : array [0..4000] of byte; } + +var HD : array[0..NumWCHills+MaxExtraHills] of ^Hillinfo_type; + +(* + mnimet : array[0..NumWCHills+MaxExtraHills] of HillStr; + kri : array[0..NumWCHills+MaxExtraHills] of integer; +*) + +(* + function ReadKey : char { in lieu of Crt.ReadKey } ; + const Buff : char = #0 ; var R : Tregisters ; + begin + if Buff<>#0 then begin ReadKey := Buff ; Buff := #0 end else + with R do begin AH := 0 ; Intr($16, R) ; + if AL=0 then Buff := char(AH) ; + ReadKey := char(AL) end ; + end {ReadKey} ; +*) + +(* + +function ReadKey : char ; assembler ; { ei extended } + asm + mov AH,00h; + int 16h + end {ReadKey}; + +*) + +(* +function ReadKey : char ; assembler ; { toimii melkein } + asm + mov AH,08h; + int 21h + end {ReadKey}; +*) + +procedure readkbd; + var w1 : word; + begin + asm + mov AH,00h; + int 16h + mov w1,AX; + end {ReadKey}; + + tempch:=chr(lo(w1)); + tempch2:=chr(hi(w1)); + +end; + + +function KeyPressed : boolean ; assembler ; + asm + mov AH,$01; + int $16 + mov AL,TRUE; + JNZ @Ende; + mov AL,FALSE; + @Ende: + end; + + { +procedure Textcolor(col:byte); begin end; +procedure Textbackground(col:byte); begin end; +procedure GotoXY(x,y:integer); begin end; +procedure Window(x1,y1,x2,y2:integer); begin end; +procedure clrscr; begin end; + } + +procedure makevcode(version:string;reg:boolean); +var pos,return : byte; +begin + + pos:=2; { v3.11 !!! } + if (reg) then pos:=4; + + if ((vcode and pos)=0) then vcode:=(vcode or pos); + +end; + +function lengthpoint(kr:integer):integer; +var return : integer; +begin + + return:=10; + + case kr of + 0..24 : return:=48; + 25..29 : return:=44; + 30..34 : return:=40; + 35..39 : return:=36; + 40..49 : return:=32; + 50..59 : return:=28; + 60..69 : return:=24; + 70..79 : return:=22; + 80..99 : return:=20; + 100..130: return:=18; + 131..200: return:=12; + 201..999: return:=10; + end; + +(* + K-Point Distance Meter Value +20 to 24 m . . . . . . . . . . . . . . 4.8 pts./m +25 to 29 m . . . . . . . . . . . . . . 4.4 pts./m +30 to 34 m . . . . . . . . . . . . . . 4.0 pts./m +35 to 39 m . . . . . . . . . . . . . . 3.6 pts./m +40 to 49 m . . . . . . . . . . . . . . 3.2 pts./m +50 to 59 m . . . . . . . . . . . . . . 2.8 pts./m +60 to 69 m . . . . . . . . . . . . . . 2.4 pts./m +70 to 79 m . . . . . . . . . . . . . . 2.2 pts./m +80 to 99 m . . . . . . . . . . . . . . 2.0 pts./m +100 to 120 m . . . . . . . . . . . . . . 1.8 pts./m +145 to 185 m . . . . . . . . . . . . . . 1.2 pts./m +*) + + lengthpoint:=return; + +end; + +{function givech(xx,yy:integer;bkcolor:byte):char;} +procedure givech(xx,yy:integer;bkcolor:byte;var tempch,tempch2:char); +var run : integer; + col : byte; + +begin + + run:=0; + + repeat + + inc(run); if (run>20) then run:=0; + + col:=240; + if (run>10) then col:=bkcolor; + + fillbox(xx,yy+6,xx+4,yy+6,col); + DrawScreen; + + until (keypressed); + + readkbd(tempch,tempch2); + + fillbox(xx,yy+6,xx+4,yy+6,bkcolor); + writefont(xx,yy,tempch); + +{ givech:=ch; } + +end; + + + +{function getch(xx,yy:integer;bkcolor:byte):char;} +procedure getch(xx,yy:integer;bkcolor:byte;var tempch,tempch2:char); +var run : integer; + col : byte; + +begin + + fillbox(xx-2,yy-2,xx+6,yy+8,bkcolor); + + givech(xx,yy,bkcolor,tempch,tempch2); + + DrawScreen; + +{ getch:=ch; } + +end; + + +function getstr(xx,yy,maxlength:integer;oldstr:string;bkcolor:byte):string; +var newstr : string; + count : integer; + out : boolean; + cx : integer; +{ tempch, tempch2 : char; } +begin + + out:=false; + + newstr:=oldstr; + count:=length(newstr); + + repeat + + cx:=fontlen(newstr); + + fillbox(xx-2,yy-2,xx+maxlength+2,yy+7,bkcolor); + writefont(xx,yy,newstr); + + DrawScreen; + + givech(xx+cx,yy,bkcolor,ch,ch2); + + if (ch2=#83) then delete(newstr,1,length(newstr)); + + case ch of + + #8 : delete(newstr,length(newstr),1); + + #13,#27 : out:=true; +{ + #32..#254 : if (cx+7 < maxlength) then newstr:=newstr+tempch; } + +{ '0'..'9','A'..'Z','','Ž','™', + 'a'..'z','†','„','”','.',',','#','!','(',')','-', } + #32..#254 : if (cx+7 < maxlength) and (fontlen(ch)>0) then newstr:=newstr+ch; + + end; { case } + + until (out); + + if (ch=#27) then newstr:=oldstr; + + getstr:=newstr; + + +end; + + + +function getstr2(xx,yy,maxchars:integer;oldstr:string;bkcolor:byte):string; +var newstr : string; + count : integer; + out : boolean; + cx : integer; +{ tempch, tempch2 : char; } +begin + + out:=false; + + newstr:=oldstr; + count:=length(newstr); + + repeat + + cx:=fontlen(newstr); + + fillbox(xx-2,yy-2,xx+(maxchars*7)+2,yy+8,bkcolor); + writefont(xx,yy,newstr); + + DrawScreen; + + givech(xx+cx,yy,bkcolor,ch,ch2); + + if (ch2=#83) then delete(newstr,1,length(newstr)); + + case ch of + + #8 : delete(newstr,length(newstr),1); + + #13,#27 : out:=true; +{ + #32..#254 : if (cx+7 < maxlength) then newstr:=newstr+tempch; } + +{ '0'..'9','A'..'Z','','Ž','™', + 'a'..'z','†','„','”','.',',','#','!','(',')','-', } + #32..#254 : if (length(newstr) < maxchars) and (fontlen(ch)>0) then newstr:=newstr+ch; + + end; { case } + + until (out); + + if (ch=#27) then newstr:='˙'; + + getstr2:=newstr; + + +end; + + +Procedure GetNow(var Now:Time); +begin + gettime(Now.Hour,Now.Minute,Now.Second,Now.Sec100); +end; + + + +function kothtitle(temp:integer):string; +var str1 : string; +begin + + case temp of + 1..6 : str1:=txt(temp)+'. '+lstr(130+temp); + 0,7 : str1:='0. '+lstr(137); + end; + + kothtitle:=str1; + +end; + + + +function loadgoal(num:integer):integer; +var temp, value:integer; + f2 : text; +begin + + assign(f2,'GOALS.SKI'); + {$I-} + reset(f2); + {$I+} + + value:=0; + + if (IOResult=0) and (num>0) and (num<=numwchills) then + begin + for temp:=1 to num do + readln(f2,value); + + close(f2); + end; + + loadgoal:=value; + +end; + +procedure setgoals; +var goals : array[0..numwchills] of integer; + temp, y : integer; + oldindex, index : integer; + leave : boolean; +{ tempch1, tempch2 : char; } + + procedure loadgoals; + var f2 : text; + temp2 : integer; + begin + assign(f2,'GOALS.SKI'); + {$I-} + reset(f2); + {$I+} + if (IOResult=0) then + begin + for temp2:=1 to NumWCHills do + readln(f2,goals[temp2]); + close(f2); + end; + end; + + procedure writegoals; + var f2 : text; + temp2 : integer; + begin + assign(f2,'GOALS.SKI'); + {$I-} + rewrite(f2); + {$I+} + if (IOResult=0) then + begin + for temp2:=1 to NumWCHills do + writeln(f2,goals[temp2]); + close(f2); + end; + end; + + procedure drawgoal(temp2,phase:integer); + begin + if (phase=0) then fontcolor(240) else fontcolor(246); + y:=(temp2*8)+24; + fillbox(168,y-2,202,y+6,243); + fillarea(168,y-2,202,y+6,63); + if (temp2>20) then ewritefont(200,y,lstr(154)) + else ewritefont(200,y,txtp(goals[temp2])); + end; + + +begin + + loadgoals; + + Newscreen(1,0); + + fontcolor(240); + writefont(30,6,lstr(200)); + fontcolor(241); + writefont(40,13,lstr(243)); + + fontcolor(246); + + writefont(24,23,lstr(106)); + ewritefont(200,23,lstr(242)); + ewritefont(250,23,'K'); + ewritefont(300,23,'HR'); + + index:=1; + leave:=false; + + for temp:=1 to NumWcHills do + begin + y:=(temp*8)+24; + fontcolor(246); + ewritefont(18,y,txt(temp)+'.'); + fontcolor(240); + writefont(24,y,nsh(hillname(temp),140)); +{ ewritefont(200,y,txtp(goals[temp])); } + drawgoal(temp,0); + fontcolor(247); + ewritefont(250,y,txtp(hillkr(temp)*10)); + ewritefont(300,y,txtp(HRLen(temp))); + end; + + inc(temp); drawgoal(temp,0); { exit } + + repeat + + y:=(index*8)+24; + drawgoal(index,1); + box(168,y-2,202,y+6,240); + + drawscreen; + + clearchs; + Readkbd(ch,ch2); + + oldindex:=index; + + if ((ch2=#75) or (ch='-')) and (goals[index]>4) then dec(goals[index],5); + if ((ch2=#77) or (ch='+')) and (goals[index]<2500) then inc(goals[index],5); + if (ch2=#72) and (index>1) then dec(index); + if (ch2=#80) and (index<21) then inc(index); + if ((ch=#13) and (index=21)) or (ch2=#68) then leave:=true; + if (ch=#27) or (ch2=#79) then index:=21; + if (ch2=#71) then index:=1; + + drawgoal(oldindex,0); + + until (leave); + + writegoals; + +end; + + + +procedure DrawLumi(delx,dely,wind:integer;lmaara:word;draw:boolean); +var temp : integer; +begin + +{ temp:=(tuuli div abs(tuuli))*(random(abs(tuuli)) div 10); + + Lumi.Update(Video,128,(delx*2)+temp,dely*2); } + +{ Lmaara:=240; + tuuli:=-40; } + + if (LMaara>0) then Lumi.Update(Video,delx*2,dely*2,wind*8,draw); + +{ writefont(1,192,txt(wind)); } + +{ if (LMaara>0) then Lumi.Update(Video,LMaara,delx*2,dely*2,tuuli); } + +end; + + + + +procedure kothchallenge(x:integer;kothpack:byte); +var temp : integer; + col1, col2 : byte; + str1 : string; + y : integer; +begin + + fontcolor(246); + writefont(x,110,lstr(130)); + + y:=120; + + if (kothpack=0) then kothpack:=7; + + for temp:=1 to 7 do + begin + fontcolor(241); + if (temp=kothpack) or (kothpack=255) then fontcolor(240); + + writefont(x,y,kothtitle(temp)); + + inc(y,8); if (temp=6) then inc(y,8); { ylim„„r„iset } + end; + +end; + + +function LoadHill(var KeulaX:integer;nytmaki:integer;Acthill:hill_type):byte; +var temp : integer; + l : longint; + str1 : string; + result : byte; +begin + result:=0; + + LataaPCX('LOAD.PCX',320*200,0,0); + SiirraStandardiPaletti; + AsetaPaletti; + move(mem[Graffa:0],mem[Video:0],64000); + +{ FillBox(0,0,319,199,242); } + +{ NewScreen(5,0); } + +{ FontColor(240); + MuutaLogo(2); + WriteFont(60,90,'LOADING HILL...'); + DrawAnim(148,90,62); + WriteFont(185,99,'...PLEASE WAIT'); + AsetaPaletti; } + + str1:=txt(Acthill.kr); + + Fontcolor(246); { 205 } +{ Writefont(160-fontlen(str1) div 2,97,str1); } + EWritefont(311,107,str1); + Fontcolor(240); + EWritefont(311-Fontlen(str1),107,Acthill.name+' K'); + + DrawScreen; + + LataaPCX('FRONT'+Acthill.frindex+'.PCX',1024*512,0,0); + + TallennaAlkuosa(1); + + LaskeLinjat(KeulaX,acthill.kr,acthill.pk); + + l:=0; + + for temp:=0 to 1023 do + inc(l,longint(profiili(temp)*(temp mod 13+profiili(temp) mod 11)) mod 13313); + + dec(l,1500000); + + LataaPCX('BACK'+acthill.bkindex+'.PCX',1024*400,Maki.Sivuja,acthill.bkmirror); + + TakaisinAlkuosa(1); + + if (l<>acthill.profile) then { profiilichekkaus } + begin + + alertbox; + + str1:='RUN THE HILL MAKER AGAIN.'; + + if (nytmaki<=NumWCHills) then + begin + result:=1; + str1:='EXITING CUP.'; + end; + + writefont(80,90,'THE PROFILE OF HILL #'+acthill.frindex); + writefont(80,102,'HAS BEEN CHANGED! NOT GOOD.'); + writefont(80,114,str1); + + writefont(80,130,'PRESS A KEY...'); + drawscreen; + + waitforkey; + + end; + + SavytaPaletti(1,acthill.bkbright); + + Loadhill:=result; + +end; + + + +function MakeMenu(x,y,length,height,items,index:integer;bgcolor,phase,tab:byte):integer; +var{ tempch1,tempch2 : char; } +{ index : integer; } + xx,yy : integer; + out,fill,putkeen : boolean; + boxcol : byte; + cols : byte; + del : boolean; + oldindex : integer; + thing : integer; + +begin { phase: 0 - DEL ei k„y, 1 - DEL k„y, 2 - 2 columns! DEL k„y } + { 3 - kaikki putkeen, 4 - ei fillarea, 5 - old players } + { 6 - new profiles, 7 - kaikki putkeen & ei fill } + + out:=false; + del:=false; { delete n„pp„in ei k„yt”ss„ } + thing:=63; + + if (phase=5) then begin thing:=64; phase:=1; end; + + case phase of + 1,2,6 : del:=true; + end; + + fill:=true; + + case phase of + 4,7 : fill:=false; + end; + + putkeen:=false; + + case phase of + 3,7 : putkeen:=true; + end; + + cols:=1; +{ if (phase=2) then cols:=2; } + +{ index:=1; } + + index:=abs(index); + + xx:=x-6; + yy:=y-3+((index-1)*height); + +(* + if (index>tab) and (cols=2) then + begin + xx:=x+160-6; + yy:=y-3+((index-1-tab)*height); + end; +*) + + boxcol:=240; + + repeat + + box(xx,yy,xx+length,yy+height,bgcolor); + if (fill) then fillarea(xx,yy,xx+length,yy+height,thing); + + clearchs; oldindex:=index; + + if (keypressed) then readkbd(ch,ch2); + + case (ch2) of + #72,#75 :{ if (cols=2) and (tempch2=#75) and (index>tab) then dec(index,tab) + else } + begin + if (index>1) then dec(index) + else index:=items+2; + if (index=items+1) then dec(index); { skip v„li } + { boxcol:=32; } + end; + #77,#80 :{ if (cols=2) and (tempch2=#77) then inc(index,tab) + else } + begin + if (index6) then index:=ord(ch)-55; { me halutaan ett„ E on edit } + 'a'..'f' : index:=ord(ch)-87; + end; + + if (index<=0) or (index>items) then + begin + index:=items+2; + if (putkeen) then index:=items+1; + end; + + if (ch2=#71) then index:=1; + if (ch=#27) or (ch2=#79) then + begin + index:=items+2; + if (putkeen) then index:=items+1; + end; + + if (ch2=#68) then { F10 } + begin + out:=true; + index:=items+2; + if (putkeen) then index:=items+1; + if (phase=6) then index:=254; + end; + + if (ch=#9) and (tab>0) then + begin { tab } + out:=true; + if (tab<254) then index:=tab; + if (tab=255) then index:=items+2; + end; + + if (ch=#13) or (ch=' ') then out:=true; + + xx:=x-6; + yy:=y-3+((index-1)*height); + + if (phase=6) and ((ch=#13) or (upcase(ch)='E') or (ch=#9)) then + begin + index:=tab; + out:=true; + end; + +(* + if (index>tab) and (cols=2) then + begin + xx:=x+160-6; + yy:=y-3+((index-1-tab)*height); + end; +*) + +{ inc(boxcol); if (boxcol>47) then boxcol:=16; } + + box(xx,yy,xx+length,yy+height,boxcol); + + DrawScreen; + + if (ch2=#83) and (del) then begin out:=true; index:=-index; end; { delete! } + + if (phase=6) and (index<>oldindex) then out:=true; + + until (out); + + box(xx,yy,xx+length,yy+height,bgcolor); + if (fill) then fillarea(xx,yy,xx+length,yy+height,thing); + + if (phase<>6) then + begin + DrawScreen; + if (index>items) then index:=0; { exit } + end; + + clearchs; + + MakeMenu:=index; + +end; + + + + +procedure DoCoachCorner(height,kulmalaskuri:integer;grade,ponn,style:byte); +var wstr : string; + cstr : array[0..5] of string; + temp, index, count,x,y : integer; +begin + + for temp:=0 to 5 do cstr[temp]:=''; + + index:=360+style*40; + + case kulmalaskuri of + 0..49 : cstr[0]:=lstr(index+2); + 50..61 : cstr[0]:=lstr(index+3); + 62..200 : cstr[0]:=lstr(index+4); + end; + + if (grade<10) then + begin + case grade of + 1 : cstr[1]:=lstr(index+5); + 2 : cstr[1]:=lstr(index+6); + 3 : cstr[1]:=lstr(index+7); + end; + end else + begin + case grade div 10 of + 1..5 : cstr[1]:=lstr(index+10); + 6..8 : cstr[1]:=lstr(index+11); + 9 : cstr[1]:=lstr(index+12); + 10 : cstr[1]:=lstr(index+13); + 11 : cstr[1]:=lstr(index+14); + 12..20 : cstr[1]:=lstr(index+15); + end; + end; + + case ponn of + 0..5 : cstr[2]:=lstr(index+18); + 6..9 : cstr[2]:=lstr(index+19); + 10..12 : cstr[2]:=lstr(index+20); + 13..15 : cstr[2]:=lstr(index+21); + 16 : cstr[2]:=lstr(index+22); + 17..19 : cstr[2]:=lstr(index+23); + 20..23 : cstr[2]:=lstr(index+24); + 24..50 : cstr[2]:=lstr(index+25); + end; + + case height of + 0..49 : cstr[3]:=lstr(index+28); + 50..55 : cstr[3]:=lstr(index+29); + 56..60 : cstr[3]:=lstr(index+30); + 61..64 : cstr[3]:=lstr(index+31); + 65..70 : cstr[3]:=lstr(index+32); + 71..90 : cstr[3]:=lstr(index+33); + 91..200 : cstr[3]:=lstr(index+34); + end; + + if (grade<10) then cstr[0]:=cstr[1]; { jos kupat n„es } + if (grade=1) then cstr[3]:=lstr(index+35); + + cstr[1]:=cstr[random(2)]; + cstr[2]:=cstr[random(2)+2]; + + cstr[1]:=cstr[1]+'*'+cstr[2]; + + FontColor(252); + + DrawAnim(3,150,65); + writefont(12,150,lstr(400)); + + index:=1; + x:=12; y:=160; + + writefont(x,y,'"'); + + count:=30; + x:=18; y:=152; + + wstr:=''; + + for temp:=1 to length(cstr[1]) do + begin + + wstr:=wstr+cstr[1][temp]; + if (wstr[index]='*') then wstr[index]:=' '; + inc(index); + + if ((index > count) and (cstr[1][temp]=' ')) or ((cstr[1][temp]='*') and (index>count div 2)) then + begin + if (y<190) then inc(y,8); + x:=18; + if (cstr[1][temp]='*') then delete(wstr,length(wstr),1); + + writefont(x,y,wstr); + x:=x+fontlen(wstr); + + wstr:=''; + index:=1; + end; + + + + end; + + if (index>1) then + if (length(wstr)<2) then writefont(x,y,wstr+'"') + else + begin + x:=18; + if (y<192) then inc(y,8); + writefont(x,y,wstr+'"'); + end; + +end; + + + +procedure SetupItem(index,screen,entries:byte;str1:string); +var xx,yy : integer; + istr : string; + good : boolean; +begin + + xx:=25; + yy:=(index*10)+30; + + good:=true; + +{$IFNDEF REG} + case screen of + 0 : if (index>4) then good:=false; + 1 : if (index=4) then good:=false; + 2 : case index of + 1,2,6,8,10 : good:=false; + end; + end; + + if (not good) then fontcolor(241); { harmaaksi, jos ei ole reg option } + + if (good) then fontcolor(246); +{$ELSE} + fontcolor(246); +{$ENDIF} + + if (index=0) then yy:=(entries*10)+50; + + istr:=HexCh[index]+'.'; + + ewritefont(xx,yy,istr); + + if (good) then fontcolor(240); + + xx:=35; + + case screen of + 0 : istr:=lstr(195+index); + 1 : istr:=lstr(203+index); + 2 : istr:=lstr(211+index); + 3 : istr:=lstr(225+index) + end; { screen case } + + writefont(xx,yy,istr); + + if (good) then fontcolor(246); + + xx:=255; + + writefont(xx,yy,str1); + +end; + +function HRName(nytmaki:integer):NameStr; +begin + HRName:=HD[nytmaki]^.HRName; +end; + +function HRLen(nytmaki:integer):integer; +begin + HRLen:=HD[nytmaki]^.HRLen; +end; + +function HRTime(nytmaki:integer):TimeStr; +begin + HRTime:=HD[nytmaki]^.HRTime; +end; + +procedure SetHRinfo(nytmaki:integer;name:NameStr;len:integer;time:TimeStr); +begin + HD[nytmaki]^.HRName:=name; + HD[nytmaki]^.HRLen:=len; + HD[nytmaki]^.HRTime:=time; +end; + +function hillkr(nytmaki:integer):integer; +var temp:integer; +begin + + temp:=0; + + if (nytmaki > 0) and (nytmaki <= NumWChills+NumExtraHills) then + temp:=HD[nytmaki]^.kr; + + hillkr:=temp; + +end; + + +function hillname(nytmaki:integer):HillStr; +var str1 : string; +begin + + if (nytmaki < 0) or (nytmaki > NumWChills+NumExtraHills) then + str1:='Unknown' + else str1:=HD[nytmaki]^.name; + +(* + if (nytmaki=0) then str1:='a Random Hill'; { ainakin koth } + *) + + if (nytmaki=0) then str1:=lstr(155); + + hillname:=str1; + +end; + + +function hillcode(nytmaki:integer):longint; +var temp:longint; + h : hill_type; +begin + + temp:=0; + + if (nytmaki > 0) and (nytmaki <= NumWChills+NumExtraHills) then + begin + loadinfo(nytmaki,h); + temp:=h.profile+ + round(h.plsave*311)+ + h.vxfinal*131+ + round(h.pk)*17+ + h.kr*11+ + svaluestr(h.name,1); + end; + + hillcode:=temp; + +end; + +procedure writehill(var f1:text;h:hill_type;index,phase:integer); + { phase: 0 - tavallinen, 1 - ei profiilin checkkausta (HR:t) } +var a,c : integer; + b : byte; + temp : integer; + l1, l2 : longint; + +begin + + l1:=0; l2:=0; + + writeln(f1,'*'+chr(index+64)); + writeln(f1,h.name); + writeln(f1,h.kr); + writeln(f1,h.frindex); + writeln(f1,h.bkindex); + writeln(f1,h.bkbright); + writeln(f1,h.bkmirror); + writeln(f1,h.vxfinal); + + b:=round(h.pk*100); + writeln(f1,b); + + a:=round(h.plsave*10000); + writeln(f1,a); + + writeln(f1,h.author); + + inc(l1,valuestr(h.name,index+1)); + inc(l1,longint(h.kr)*77); + c:=num(h.frindex); { t„m„ yhteensopivuudenkin takia } + if (c<0) then c:=valuestr(h.frindex,index+1); { jos indexiss„ kirjaimia (v3.10) } + inc(l1,longint(c)*272); + c:=num(h.bkindex); { t„m„ my”s } + if (c<0) then c:=valuestr(h.bkindex,index+1); + inc(l1,longint(c)*373); + inc(l1,longint(h.bkbright)*313); + inc(l1,longint(h.bkmirror)*5775); + inc(l1,longint(h.vxfinal)*333); + inc(l1,longint(b) mod 55555); + inc(l1,longint(a) mod 11111); + inc(l1,valuestr(h.author,index+2)); + + l1:=l1 xor 787371; + + writeln(f1,l1); + + l2:=0; + + if (phase=1) then + begin + writeln(f1,h.profile); + end else + begin + + h.hrname:='Default˙'; + h.hrlen:=0; + h.hrtime:='Jan 1 2001 1:00'; { nollataan hillrec } + + LataaPCX('FRONT'+h.frindex+'.PCX',1024*512,0,0); + LaskeLinjat(a,h.kr,h.pk); + + for a:=0 to 1023 do + inc(l2,longint(profiili(a)*(a mod 13+profiili(a) mod 11)) mod 13313); + + dec(l2,1500000); + + writeln(f1,l2); + end; + +{ writeln(f1); } + + if (index=0) then { extra hill } + begin + l1:=0; + + writeln(f1,h.hrname); { m„kienkkatiedot } + writeln(f1,h.hrlen); + writeln(f1,h.hrtime); + + inc(l1,valuestr(h.hrname,13)); { checksum } + inc(l1,longint(h.hrlen)*3553); + writeln(f1,l1); + end; + +end; + + + +procedure defaulthill(var hill:hill_type); +begin + + with hill do + begin + name:='Default'; + author:='Unknown'; + frindex:='1'; { front index eli etukuvan j„rj n:o } + bkindex:='0'; { back index } + bkbright:=100; { taustan kirkkaus, 100 = normaali } + bkmirror:=0; { peilataanko tausta? 0 - ei, 1 - joo } + + kr:=120; + pk:=1.0; + plsave:=0.321; + vxfinal:=140; + + hrname:='Default Jumper˙'; + hrlen:=0; + hrtime:='Oct 1 2000 0:00'; + + end; + +end; + + + +procedure resultbox(phase:byte;result:integer); +var temp : integer; +{ tempch, tempch2 : char; } +begin + + temp:=348+(phase*2); + + if (result<>0) then inc(temp); + + { 1 - repl, 2 - custo, 3 - extrh } + + fillbox(59,79,261,121,250); + fillbox(60,80,260,120,245); + + fontcolor(246); + + writefont(75,90,lstr(temp)); + waitforkey3(240,105,ch); + +end; + + + + +procedure makewarning(num:integer;str1:string); +begin + + alertbox; + + writefont(80,90,'SJ3 WARNING #'+txt(num)); + writefont(80,105,str1); + + writefont(80,120,'PRESS A KEY...'); + drawscreen; + + waitforkey; + +end; + + + +function findstart(var f1:text; + nytmaki:integer):byte; +var str1:string; + result:byte; + out:boolean; +begin + + out:=false; + result:=1; { ei l”ytynyt ok } + + repeat + + if (eof(f1)) then out:=true + else readln(f1,str1); + + if (str1[1]='*') then + if (nytmaki=0) or (str1[2]=chr(nytmaki+64)) + then begin out:=true; result:=0; end; + + until (out); + + findstart:=result; + +end; + + + +function fexist(filename:string):boolean; +var tempb : boolean; + f1 : file; +begin + + tempb:=false; + + {$I-} + assign(f1,filename); + reset(f1); + {$I+} + if (IOResult = 0) then + begin + tempb:=true; + close(f1); + end; + + fexist:=tempb; + +end; + + + +function hillfile(nyt:integer):string; +var str1 : string; + temp : integer; + f2 : text; +begin + + hillfile:='HILLBASE.SKI'; + + if (nyt<=NumExtraHills) then + begin + assign(f2,'MOREHILL.SKI'); + {$I-} + reset(f2); + {$I+} + FileOK(IOResult,'MOREHILL.SKI'); + + str1:='ERROR.SJH'; + + readln(f2); { NumExtraHills pois } + + for temp:=1 to nyt do + readln(f2,str1); + + close(f2); + + hillfile:=str1; + + end; +end; + + + + + +function LoadInfo(nytmaki:integer; + var hill:hill_type):byte; + +var result : byte; + f1 : text; + a,c : integer; + b : byte; + str1 : string; + l1,l2,l3,l4 : longint; + temp : integer; + good : boolean; + + procedure checkfile(phase:integer); + var filename : string; + str2 : string; + indexstr : string[3]; + + begin + + str2:='FRONT'; + indexstr:=hill.frindex; + if (phase=1) then begin str2:='BACK'; indexstr:=hill.bkindex; end; + + filename:=str2+indexstr+'.PCX'; + + if (not fexist(filename)) then + begin + AsetaMoodi($3); + writeln('Error #345A: File '+filename+' does not exist,'); + writeln('even though it''s mentioned in the ',str1,' file.'); + writeln('Using FRONT1.PCX and BACK1.PCX.'); + writeln; + writeln('Press a key...'); + + hill.bkindex:='1'; + hill.frindex:='1'; + + waitforkey; + + AsetaMoodi($13); + end; + end; + + +begin + + l1:=0; l2:=0; l3:=0; l4:=0; + + defaulthill(hill); + + if (nytmaki<=NumWCHills) then str1:='HILLBASE.SKI' + else str1:=hillfile(nytmaki-NumWCHills)+'.SJH'; + + assign(f1,str1); + + {$I-} + reset(f1); + {$I+} + FileOk(IOResult, str1); + + temp:=nytmaki; + + if (nytmaki>NumWCHills) then temp:=0; + + if (findstart(f1,temp)=0) then + begin + readln(f1,hill.name); + readln(f1,hill.kr); + readln(f1,hill.frindex); + readln(f1,hill.bkindex); + readln(f1,hill.bkbright); + readln(f1,hill.bkmirror); + readln(f1,hill.vxfinal); + readln(f1,b); + hill.pk:=(b/100); + readln(f1,a); + hill.plsave:=(a/10000); + readln(f1,hill.author); + readln(f1,l2); { checksum } + readln(f1,hill.profile); + + inc(l1,valuestr(hill.name,temp+1)); + inc(l1,longint(hill.kr)*77); + c:=num(hill.frindex); { t„m„ yhteensopivuudenkin takia } + if (c<0) then c:=valuestr(hill.frindex,temp+1); { jos indexiss„ kirjaimia (v3.10) } + inc(l1,longint(c)*272); + c:=num(hill.bkindex); { t„m„ my”s } + if (c<0) then c:=valuestr(hill.bkindex,temp+1); + inc(l1,longint(c)*373); + inc(l1,longint(hill.bkbright)*313); + inc(l1,longint(hill.bkmirror)*5775); + inc(l1,longint(hill.vxfinal)*333); + inc(l1,longint(b) mod 55555); + inc(l1,longint(a) mod 11111); + inc(l1,valuestr(hill.author,temp+2)); + + l1:=l1 xor 787371; + + if (nytmaki>NumWCHills) then { voi olla ettei n„it„ oo - v3.00} + begin + + {$I-} + readln(f1,hill.hrname); + readln(f1,hill.hrlen); + readln(f1,hill.hrtime); + readln(f1,l3); + {$I+} + + if (IOResult=0) and (l3<>0) then { kaikki ok } + begin + inc(l4,valuestr(hill.hrname,13)); + inc(l4,longint(hill.hrlen)*3553); + if (l3<>l4) then inc(l1); + end else + begin + { beep(1); } + hill.hrname:='Nobody˙'; + hill.hrlen:=0; + hill.hrtime:='Oct 1 2000 0:00'; + end; + + end; + end; + + close(f1); + + checkfile(0); + checkfile(1); + + if (l1<>l2) then { joku ei t„sm„„! } + begin + if (nytmakih2.name) or + (h1.author<>h2.author) or + (h1.kr<>h2.kr) or + (h1.frindex<>h2.frindex) or + (h1.bkindex<>h2.bkindex) or + (h1.bkbright<>h2.bkbright) or + (h1.bkmirror<>h2.bkmirror) or + (h1.vxfinal<>h2.vxfinal) or + (h1.pk<>h2.pk) or + (h1.plsave<>h2.plsave) or + (h1.profile<>h2.profile) then tempb:=true; + + checkdiff:=tempb; + +end; + + + + + +procedure edithill(var h2:hill_type;var filestr:string;change:boolean); +var temp : integer; + tempb : byte; + leave2 : boolean; +{ ch,ch2 : char; } + index2 : integer; + xx, xx2, yy : integer; + str1 : string; + oldhill : hill_type; + f2 : text; + + procedure getnum(var thisnum:byte;low,high:byte); + var code : integer; + temp : longint; + str2 : string; + begin + str2:=getstr(xx2,yy,30,txt(thisnum),242); + val(str2,temp,code); + + if (temphigh) then temp:=high; + + if (code=0) then thisnum:=temp; + end; + + procedure getint(var thisnum:integer;low,high:integer); + var code : integer; + temp : longint; + str2 : string; + begin + str2:=getstr(xx2,yy,30,txt(thisnum),242); + val(str2,temp,code); + + if (temphigh) then temp:=high; + + if (code=0) then thisnum:=temp; + + end; + +begin + + leave2:=false; +{ change:=false; } + index2:=1; + xx:=15; + xx2:=120; + yy:=20; + + oldhill:=h2; +{ oldfile:=filestr; } + + repeat + + newscreen(5,0); + + for temp:=1 to 12 do + begin + + case temp of + 1 : str1:='HILL.NAME'; + 2 : str1:='K.POINT'; + 3 : str1:='FRONT INDEX'; + 4 : str1:='BACK INDEX'; + 5 : str1:='BACK BRIGHT'; + 6 : str1:='MIRROR BACK'; + 7 : str1:='VX.FINAL'; + 8 : str1:='ADJUST.K'; + 9 : str1:='AIR.P.PLUS'; + 10 : str1:='AUTHOR'; + 11 : str1:='FILENAME'; + 12 : str1:='EXIT, DON''T SAVE'; + end; + + yy:=10+(temp-1)*13; + + fontcolor(240); + if (temp<12) then str1:=str1+':'; + writefont(xx,yy,txt(temp)+'. '+str1); + + str1:=''; + + case temp of + 2 : str1:='Critical Point (40-300Ģ)'; + 3 : str1:='FRONT*.PCX (000-ZZZ)'; + 4 : str1:='BACK*.PCX (000-ZZZ)'; + 5 : str1:='PERCENTS OF ORIGINAL (0-255)'; + 6 : str1:='0-NO, 1-MIRROR (0-1)'; + 7 : str1:='TAKE-OFF SPEED (60-145 KM/H)'; + 8 : str1:='MOVE K-POINT ON HILL (50-150)'; + 9 : str1:='+ 990 MBAR (0-30)'; + 11 : str1:=' 8 CHARS MAX'; + end; + + fontcolor(241); + writefont(xx2+40,yy,str1); + + str1:=''; + + case temp of + 1 : str1:=h2.name; + 2 : str1:=txt(h2.kr); + 3 : str1:=h2.frindex; + 4 : str1:=h2.bkindex; + 5 : str1:=txt(h2.bkbright); + 6 : str1:=txt(h2.bkmirror); + 7 : str1:=txt(h2.vxfinal-40); + 8 : str1:=txt(round(h2.pk*100)); + 9 : str1:=txt(round(h2.plsave*10000)-3204); + 10: str1:=h2.author; + 11: str1:=filestr; + end; + + fontcolor(246); + writefont(xx2,yy,str1); + + end; + + temp:=14; + + yy:=10+(temp-1)*13; + + writefont(xx,yy,'0. EXIT and SAVE'); + + index2:=MakeMenu(10,8,110,13,12,index2,243,0,0); + + yy:=10+(index2-1)*13; + + case index2 of + 0 : begin + if (not change) then change:=checkdiff(oldhill,h2); + if (not change) then filestr:='NULL'; { ei tarvi tallentaa } + leave2:=true; + + if (filestr<>'NULL') then + begin + + if (fexist(filestr+'.SJH')) then + begin + alertbox; + + writefont(80,90,'FILE '+filestr+'.SJH ALREADY EXISTS.'); + writefont(80,110,'WRITE OVER? (Y/N):'); + + getch(190,110,243,ch,ch2); + + if (upcase(ch) <> 'Y') then + begin leave2:=false; index2:=11; end; + end; + end; + end; + 1 : h2.name:=getstr(xx2,yy,150,h2.name,242); + 2 : getint(h2.kr,40,300); + 3 : begin + str1:=h2.frindex; + h2.frindex:=getstr(xx2,yy,20,h2.frindex,242); + if (not fexist('FRONT'+h2.frindex+'.PCX')) then + begin + alertbox; + writefont(80,90,'INVALID FRONT INDEX VALUE.'); + writefont(80,100,'FILE FRONT'+h2.frindex+'.PCX DOESN''T EXIST.'); + waitforkey3(190,110,ch); + h2.frindex:=str1; + end; + end; + 4 : begin + str1:=h2.bkindex; + h2.bkindex:=getstr(xx2,yy,20,h2.bkindex,242); + if (not fexist('BACK'+h2.bkindex+'.PCX')) then + begin + alertbox; + writefont(80,90,'INVALID BACK INDEX VALUE.'); + writefont(80,100,'FILE BACK'+h2.bkindex+'.PCX DOESN''T EXIST.'); + waitforkey3(190,110,ch); + h2.bkindex:=str1; + end; + end; + 5 : getnum(h2.bkbright,0,255); + 6 : getnum(h2.bkmirror,0,1); + 7 : begin + tempb:=h2.vxfinal-40; + getnum(tempb,60,145); + h2.vxfinal:=tempb+40; + end; + 8 : begin + temp:=round(h2.pk*100); + getint(temp,50,150); + h2.pk:=temp/100; + end; + 9 : begin + temp:=round(h2.plsave*10000)-3204; + getint(temp,0,30); + h2.plsave:=(temp+3204)/10000; + end; + 10 : h2.author:=getstr(xx2,yy,150,h2.author,242); + 11 : begin + str1:=getstr2(xx2,yy,8,filestr,242); + if (str1<>'˙') then filestr:=str1; + +{ if (length(filestr)>8) then filestr:=copy(filestr,1,8); } + end; + 12 : begin + leave2:=true; + h2:=oldhill; + filestr:='NULL'; + end; + end; + + until (leave2); + + index2:=1; leave2:=false; { kun se on sekoillut v„h„n... } + +end; + + +function replayinfo(var filename, author, name:string;nytmaki,hp:integer):byte; +var result : byte; + str1 : string; + temp, index2 : integer; +{ ch, ch2 : char; } + xx, yy : integer; + leave2 : boolean; + f2 : text; +begin + + result:=0; + index2:=1; + leave2:=false; + xx:=18; yy:=40; + + name:='Huge Jump in '+hillname(nytmaki); + filename:='TEMP'; + + repeat + + newscreen(1,0); + +{ fillbox(50,30,270,170,243); + fillarea(50,30,270,170,64); + fontcolor(246); } + + fontcolor(240); + + writefont(30,6,lstr(25)+': '+txtp(hp)+'Ģ at '+hillname(nytmaki)+' K'+txt(hillkr(nytmaki))); + + for temp:=1 to 5 do + begin + + yy:=(temp*16)+26; + + if (temp<5) then fontcolor(240) + else inc(yy,16); + + str1:=''; + case temp of + 1,2,3 : str1:=lstr(290+temp); + 4,5 : str1:=lstr(291+temp); + end; + + writefont(xx,yy,txt(temp)+'. '+str1); + fontcolor(246); + + str1:=''; + case temp of + 1 : str1:=author; + 2 : str1:=name; + 3 : str1:=filename; + end; + + writefont(xx+130,yy,str1); + + end; + + index2:=makemenu(15,39,135,16,4,index2,243,0,0); + + yy:=(index2*16)+26; + + case index2 of + 1 : author:=getstr(xx+130,yy,130,author,242); + 2 : name:=getstr(xx+130,yy,130,name,242); + 3 : begin + str1:=getstr2(xx+130,yy,8,filename,242); + if (str1<>'˙') then filename:=str1; +{ if (length(filename)>8) then filename:=copy(filename,1,8); } + end; + 4 : begin + leave2:=true; + result:=1; + end; + 0 : begin + leave2:=true; + + if (fexist(filename+'.SJR')) then + begin + alertbox; + + writefont(80,90,filename+'.SJR '+lstr(345)); + writefont(80,110,lstr(346)+' ('+lch(6,1)+'/'+lch(7,1)+'):'); + + getch(190,110,243,ch,ch2); + + if (upcase(ch) <> lch(6,1)) then + begin leave2:=false; index2:=3; end; + + end; + end; + end; + + until (leave2); + + replayinfo:=result; + +end; + + +function keyname(chw:word):string; +var str1:string; + ch : key_type; +begin + + ch.A:=chr(hi(chw)); + ch.B:=chr(lo(chw)); + + str1:='NULL'; + + case ch.A of + #0 : case ch.B of + #59..#67 : str1:='F'+txt(ord(ch.B)-58); + #71 : str1:='HOME'; + #72 : str1:=lstr(280); + #73 : str1:='PAGE UP'; + #75 : str1:=lstr(281); + #76 : str1:='NP 5'; + #77 : str1:=lstr(282); + #79 : str1:='END'; + #80 : str1:=lstr(283); + #81 : str1:='PAGE DOWN'; + #82 : str1:='INSERT'; + #83 : str1:='DELETE'; + end; + + #8 : str1:='BACKSPACE'; + #9 : str1:='TAB'; + +{ #13 : str1:='ENTER'; } + ' ' : str1:='SPACE'; + '.' : str1:='.'; + ',' : str1:=','; + '-' : str1:='-'; + '+' : str1:='+'; + '/' : str1:='/'; + '*' : str1:='*'; + + + #48..#57 : str1:=txt(ord(ch.A)-48); + #65..#90 : str1:=ch.A; + #97..#122 : str1:=upcase(ch.A); + + end; + + keyname:=str1; + +end; + +function kword(ch1,ch2:char):word; +begin + + kword:=ord(ch1)*$100+ord(ch2); + +end; + + +procedure DefaultKeys(var K:array of word); +begin + + K[1]:=72; + K[2]:=77; + K[3]:=75; + K[4]:=ord('T')*$100+20; + K[5]:=ord('R')*$100+19; + +end; + + +procedure ConfigureKeys(var K:array of word); +var leave2 : boolean; + index2, temp, temp2, x, y : integer; + str2 : string; + tch : key_type; + +begin + + leave2:=false; + index2:=1; + x:=25; + + repeat + + Newscreen(1,0); + + fontcolor(240); + writefont(30,6,lstr(199)); + + for temp:=1 to 6 do + begin + y:=temp*10 + 30; + fontcolor(240); + writefont(x+10,y,lstr(temp+330)); + str2:=''; + + if (temp<6) then str2:=keyname(K[temp]); + + fontcolor(246); + writefont(x+160,y,str2); + ewritefont(x,y,txt(temp)+'.'); + end; + + inc(y,20); + ewritefont(x,y,'0.'); + fontcolor(240); + writefont(x+10,y,lstr(337)); + + index2:=makemenu(35,40,150,10,6,index2,243,0,0); + + tch.A:=#0; tch.B:=#0; + + case index2 of + 0 : leave2:=true; + 1..5 : begin + repeat + y:=index2*10+30; + + fillbox(180,y-2,319,y+7,243); + fillarea(180,y-2,319,y+7,63); + + getch(185,y,245,tch.A,tch.B); + tch.A:=upcase(tch.A); + + str2:=keyname(kword(tch.A,tch.B)); + + temp2:=0; + + for temp:=1 to 5 do + if (kword(tch.A,tch.B) = K[temp]) then temp2:=temp; + + if (temp2>0) and (temp2<>index2) then str2:='NULL'; + + until (str2<>'NULL'); + + K[index2]:=kword(tch.A,tch.B); + + end; + 6 : DefaultKeys(K); + end; + + until (leave2); + +end; + + +procedure WriteExtraHillHR(index:integer); +var f1 : text; + h : hill_type; + temp : integer; +begin + + LoadInfo(index,h); + + h.HRName:=HD[index]^.HRname; + h.HRLen:=HD[index]^.HRlen; + h.HRTime:=HD[index]^.HRtime; + + temp:=index-NumWCHills; + + assign(f1,hillfile(temp)+'.SJH'); + {$I-} + rewrite(f1); + {$I+} + if (IOResult=0) then + begin + writehill(f1,h,0,1); { ainoa mesta jossa phase=1 } + close(f1); + end else + begin + writeln('Error #29: Couldn''t write file ',hillfile(temp)+'.SJH'); + writeln('Maybe the disk is full or something.'); + end; + +end; + +(* +procedure HillEditor(phase:byte); +var h : array[0..20] of hill_type; + filestr : string; + temp, index : integer; + str1 : string; + leave : boolean; + f1 : text; +begin + + for temp:=1 to 20 do + LoadInfo(temp,h[temp]); + + index:=1; + + filestr:='NULL'; + + repeat + + NewScreen(5,0); + + for temp:=1 to NumWCHills do + begin + fontcolor(246); + ewritefont(71,(temp-1)*8+10,txt(temp)+'.'); + fontcolor(247); + str1:=copy(hillname(temp),1,6); + writefont(80+fontlen(str1),(temp-1)*8+10,'K'+txt(hillkr(temp))); + fontcolor(240); + writefont(75,(temp-1)*8+10,str1); + end; + + inc(temp,2); + ewritefont(71,(temp-1)*8+10,'0.'); + writefont(75,(temp-1)*8+10,'EXIT'); + + DrawScreen; + + index:=MakeMenu(60,11,80,8,20,1,243,0,0); + + if (index=0) then leave:=true + else edithill(h[index],filestr,false); + + until (leave); + + assign(f1,'HILLBASE.SKI'); + rewrite(f1); + + writeln(f1,'-HILLBASE.SKI- DO NOT ATTEMPT TO EDIT THIS FILE!'); + + for temp:=1 to 20 do + begin + + writehill(f1,h[temp],temp,0); + + end; + + writeln(f1,'*** End of Base File ***'); + + close(f1); + + leave:=false; index:=1; { ihan vaan kun se on ollut v„h„n sekaisin... } + +end; +*) + + +procedure CheckExtraHills; +var DirInfo : TSearchRec; + Attr : word; + f1 : text; + temp : integer; + filenames : array[0..MaxExtraHills] of string[12]; + +begin + + NumExtraHills:=0; + + for temp:=0 to MaxExtraHills do filenames[temp]:=''; + + Attr:=0; + + FindFirst('*.SJH', Attr, DirInfo); + + while (DosError = 0) and (NumExtraHills < MaxExtraHills) do + begin + + inc(NumExtraHills); + + temp:=0; + + while (DirInfo.Name[temp]<>'.') do + begin + filenames[NumExtraHills]:=filenames[NumExtraHills]+DirInfo.Name[temp]; + inc(temp); + end; + + FindNext(DirInfo); + + end; + + DosError:=0; + + Assign(f1,'MOREHILL.SKI'); + ReWrite(f1); + + writeln(f1,NumExtraHills); + + for temp:=1 to NumExtraHills do + writeln(f1,filenames[temp]); + + Close(f1); + +end; + + + + +procedure LoadHillInfo; { t„ll„ ladataan mnimet ja kri -taulut kuntoon } +var f1 : text; + result,temp : byte; + NowHill : hill_type; + filename : string; + i : integer; + +begin + + filename:='MOREHILL.SKI'; + + assign(f1,filename); + + {$I-} + reset(f1); + {$I+} + FileOk(IOResult, filename); + + readln(f1,NumExtraHills); + + close(f1); + + for temp:=1 to NumWCHills+NumExtraHills do + begin + LoadInfo(temp,NowHill); + HD[temp]^.Name:=NowHill.Name; + HD[temp]^.Kr:=NowHill.Kr; + end; + + NumHills:=NumWCHills+NumExtraHills; + +end; + + +{procedure chooselanguage; } + + + +procedure choosewindplace(var place:byte); +var index, apu1, yy : integer; + str1 : string; +const winds : byte = 11; +begin + + fillbox(54,19,276,181,248); + fillbox(55,20,275,180,243); + + fontcolor(246); + writefont(75,30,lstr(221)); + + for apu1:=1 to winds do + begin + yy:=apu1*10+34; + { 390-top, 391-middle, 392-bottom, 393-left, 394-center, 395-right, 396-jpr } + case apu1 of + 1 : str1:=lstr(392)+'-'+lstr(393); + 2 : str1:=lstr(391)+'-'+lstr(393); + 3 : str1:=lstr(392)+'-'+lstr(395); + 4 : str1:=lstr(392)+'-'+lstr(394); + 5 : str1:=lstr(391)+'-'+lstr(395); + 6 : str1:=lstr(390)+'-'+lstr(395); + 7 : str1:=lstr(390)+'-'+lstr(394); + 8 : str1:=lstr(390)+'-'+lstr(393); + 9 : str1:=lstr(396)+': '+lstr(390); { oikeasti 11 } + 10 : str1:=lstr(396)+': '+lstr(391); { 12 } + 11 : str1:=lstr(396)+': '+lstr(392); { 13 } + end; + + fontcolor(246); + ewritefont(85,yy,txt(apu1)+'.'); + fontcolor(240); + writefont(90,yy,str1); + + end; + + inc(yy,20); + fontcolor(246); + ewritefont(85,yy,'0.'); + fontcolor(240); + writefont(90,yy,lstr(154)); + + apu1:=place; if (apu1>10) then dec(apu1,2); + + index:=makemenu(70,44,140,10,winds,apu1,243,4,0); + + if (index>8) then inc(index,2); + + if (index>0) then place:=index; + +end; + + +procedure WriteExtras; { kirjoitetaan extrahillsien hillrecit } +var f1 : text; + temp, index : integer; + h : Hill_type; +begin + + for temp:=1 to NumExtraHills do + begin + index:=temp+NumWCHills; + WriteExtraHillHR(index); + end; + +end; + +procedure ReadExtras; +var temp,index : integer; + h : Hill_type; +begin + + for temp:=1 to NumExtraHills do + begin + index:=temp+NumWCHills; + LoadInfo(index,h); + HD[index]^.HRname:=h.HRname; + HD[index]^.HRlen:=h.HRlen; + HD[index]^.HRtime:=h.HRtime; + end; + +end; + + + + +function mightdelete(filestr:string):byte; +var f1 : text; + tempb : byte; + +begin + + tempb:=1; + + alertbox; + + writefont(75,90,lstr(194)+' '+filestr); + writefont(75,110,lstr(193)+' ('+lch(6,1)+'/'+lch(7,1)+')'); + + getch(220,110,243,ch,ch2); + + if (upcase(ch) = upcase(lch(6,1))) then + begin + + assign(f1,filestr); + {$I-} + reset(f1); + {$I+} + if (IOResult=0) then + begin + close(f1); + erase(f1); + tempb:=0; { yep, deleted } + end; + end; + +{ command:='/C DEL '+filestr+' > NUL:'; + SwapVectors; + Exec(GetEnv('COMSPEC'),Command); + SwapVectors; } +{ if (DosError <> 0) then + begin + fillbox(60,60,260,120,244); + writefont(80,70,'OK, THIS DELETE THING'); + writefont(80,80,'IS A LITTLE STRANGE.'); + writefont(80,90,'I GOT DOSERROR '+txt(doserror)+'.'); + writefont(80,100,'PLEASE REPORT ME. THANKS.'); + DrawScreen; + Readkey; + end; } + + clearchs; + + mightdelete:=tempb; + +end; + + + + +procedure HillMaker(phase:byte); + +const show = 18; + +var h : hill_type; + filestr : string; + command : string[79]; + items, temp, temp2, index, index2 : integer; + create, next, prev : byte; + + start : integer; + + str1 : string; + edit, newfile, leave : boolean; + f1 : text; +{ tempch : char; } + cols : array [1..3] of integer; + +begin + + index:=1; + + start:=0; { sivulis„ys... } + + cols[1]:=100; + cols[2]:=160; + cols[3]:=300; + + newfile:=false; + +{ + writefont(1,1,txt(DosError)); + drawscreen; + readkey; +} + + repeat + + NewScreen(5,0); + create:=0; next:=0; prev:=0; { koodeja... } + + fontcolor(246); +{ writefont(100,10,lstr(271)); } + writefont(5,5,lstr(270)); +{ writefont(1,1,txt(DosError)); } + + fontcolor(241); + writefont(5,21,lstr(271)); + writefont(5,29,lstr(272)); + + + fontcolor(247); + + str1:=txt(1+(start div show))+' '+lstr(8)+' '+txt((numextrahills-1) div show+1); + + writefont(5,45,lstr(157)+' '+str1); + writefont(cols[1],5,lstr(273)); + writefont(cols[2],5,lstr(274)); + + fontcolor(240); + + temp:=0; + + temp2:=NumExtraHills-start; + if (temp2>show) then temp2:=show; + + items:=temp2; + + if (NumExtraHills>0) then + for temp:=1 to temp2 do + begin + str1:=nsh(hillname(start+temp+NumWCHills)+' K'+txt(hillkr(start+temp+NumWCHills)),150); + { ewritefont(300,5+temp*8,str1); } + writefont(cols[1],5+temp*8,hillfile(start+temp)); + writefont(cols[2],5+temp*8,str1); + end; + + if (NumExtraHills 0) then + begin + inc(temp); inc(items); prev:=items; + writefont(cols[1],5+temp*8,lstr(159)); { * previous page * } + end; + + fontcolor(240); + + inc(temp,2); + writefont(cols[1],5+temp*8,lstr(276)); + + DrawScreen; + + index:=MakeMenu(99,14,221,8,items,1,243,1,0); + + leave:=false; + + if (index<0) and (abs(index)+start<=NumExtraHills) then { delete? } + begin + filestr:=hillfile(abs(index)+start)+'.SJH'; + + if (mightdelete(filestr) = 0) then + begin + CheckExtraHills; + LoadHillinfo; + end; + end; + + if (index>0) then + begin + + edit:=false; + + if (index=next) then inc(start,show); + if (index=prev) then dec(start,show); + + if (index=create) then + begin + filestr:='NEW'+txt(index+start); + defaulthill(h); + edit:=true; + newfile:=true; + end; + + if (index<=temp2) then { uusi } + begin + loadinfo(start+index+NumWCHills,h); + filestr:=hillfile(start+index); + edit:=true; + end; + + if (edit) then + begin + edithill(h,filestr,newfile); + + if (filestr<>'NULL') then { sitten kirjoitetaan p„„lle } + begin + {$I-} + assign(f1,filestr+'.SJH'); + rewrite(f1); + {$I+} + if (IOResult=0) then + begin + writehill(f1,h,0,0); { file aukesi ok } + close(f1); + end; + + newscreen(5,0); + resultbox(3,IOResult); + + end; + + checkextrahills; + loadhillinfo; + end; + + end; + + if (index=0) then leave:=true; + + until (leave); + +end; + + +function injured:shortint; +var temp1 : shortint; +begin +{ v3.00 classified - top secret change! + case random(4) of + 0,1 : temp1:=0; + 2 : temp1:=1; + 3 : temp1:=random(4)+1; + end; +} + + case random(5) of + 0,1,2 : temp1:=0; + 3 : temp1:=1; + 4 : temp1:=random(4)+1; + end; + + + injured:=temp1; + +{ injured:=5; } + +end; + + +function makeletter(temp:integer):char; +var tempch:char; + begin + + tempch:=' '; + + case temp of + 1 : tempch:='E'; { Early Takeoff } + 2 : tempch:='L'; { Slow Landing } + 3 : tempch:='F'; { Fall } + 4 : tempch:='D'; { Did not show } + 5 : tempch:='H'; { Hillrecord } + 6 : tempch:='t'; { Telemark-landing } + 7 : tempch:='r'; { Two Footed landing } + end; + + makeletter:=tempch; + +end; + + +function dayandtime(d1:Date;t1:Time):string; +var str1,str2 : string; +const days : array [0..6] of string[4] = + ( 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' ); + months : array[1..12] of string[5] = + ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); + + begin + + str2:=txt(d1.Day); + if d1.Day<10 then str2:=' '+str2; + + str1:=days[d1.DayofWeek]+' '+str2+' '+months[d1.Month]+' '+txt(d1.Year)+' '; + if t1.Hour<10 then str1:=str1+' '; + str1:=str1+txt(t1.Hour)+':'; + if t1.Minute<10 then str1:=str1+'0'; + str1:=str1+txt(t1.Minute); + + dayandtime:=str1; + end; + + + +Function waitforkey3(xx,yy:integer;var ch:char):boolean; +var tempboole : boolean; +{ ch2 : char; } + +begin + +{ if (place=1) then yy:=191; } + + while keypressed do readkbd(ch,ch2); + + tempboole:=false; + + fontcolor(240); + + ewritefont(xx,yy,lstr(15)); + + getch(xx+1,yy,243,ch,ch2); + + if (ch=#0) and (ch2=#68) then begin tempboole:=true; ch:=#27; end; + + waitforkey3:=tempboole; + +end; + + +function quitting(phase:byte):byte; + { 0-main menu, 1-world cup } +var str1, str2 : string; + tempb : byte; +begin + + str1:=lrstr(251,253); + if (phase=1) then str1:=lstr(245); + str2:=lrstr(256,258); + + alertbox; + + tempb:=fontlen(str2)+4; + + fontcolor(241); + writefont(70+tempb,110,'('+lch(6,1)+'/'+lch(7,1)+')'); + + inc(tempb,25); + + fontcolor(246); + + writefont(70,90,str1); + writefont(70,110,str2); + + getch(70+tempb,110,243,ch,ch2); + + tempb:=1; + if (upcase(ch) = lch(6,1)) then tempb:=0; + clearchs; + + quitting:=tempb; + +end; + + +procedure teamwarning; +begin + +{ alertbox; } + + fillbox(59,59,261,141,242); + fillbox(60,60,260,140,244); + + fillarea(60,60,260,140,63); + + fontcolor(246); + + writefont(80,72,lstr(261)); + writefont(80,82,lstr(262)); + writefont(80,92,lstr(263)); + writefont(80,112,lstr(264)); + writefont(80,122,lstr(265)); + + drawscreen; + + waitforkey; + +end; + + + +Function Luehaalarit(index,col:byte):byte; +var { ch : char; } + old : byte; + y : integer; +begin + + fillbox(145,50,318,60,243); + fillarea(145,50,318,60,64); + fillbox(145,180,318,195,243); + fillarea(145,180,318,195,64); + + fontcolor(241); + writefont(170,51,lstr(149)+':'); +{ fontcolor(241); } + writefont(150,185,lstr(150)); + + old:=col; { vanha v„ri } + + LoadSuit(col,0); + AsetaPaletti; + + y:=(index-1)*9+64; + + fillbox(300,y-2,314,y+8,242); + fillbox(302,y,312,y+6,218); + fillbox(303,y+1,311,y+5,216); + + drawscreen; + + repeat + + LoadSuit(col,0); + AsetaPaletti; + + readkbd(ch,ch2); + + if (ch=#0) then + begin + ch:=readkey; + if ((ch=#72) or (ch=#75)) and (col>0) then dec(col); + if ((ch=#80) or (ch=#77)) and (col<6) then inc(col); + end; + + until (ch=#13) or (ch=#27); + + if (ch=#27) then col:=old; + + Luehaalarit:=col; + +end; + + +Function crypt(arvo:longint;jarj:integer):string; +var str1,str2 : string; + index : byte; +begin + + str(arvo,str1); + + if (length(str1)<5) then for index:=1 to 5-length(str1) do str1:='0'+str1; + + str2:=''; + + for index:=5 downto 1 do + str2:=str2+chr(ord(str1[index])+21); + + str1:=chr(68+2*(arvo mod 7 xor 1)); { tarkistusluku arvosta } + insert(str1,str2,2); + str1:=chr(65+((jarj xor 33) mod 19)); { tarkistusluku j„rjestyksest„ } + insert(str1,str2,3); + str1:=chr(68+random(6)); { ihan vaan satunnainen kirjain } + if (length(txt(arvo))>5) then str1:=chr(ord(str1[6])+27); + insert(str1,str2,5); +{ insert('*',str2,5); } + + crypt:=str2; + +end; + + + +function uncrypt(str0:string;jarj:integer):longint; +var str1 : string; + high,chk1,chk2 : char; + luku1 : longint; + luku2 : integer; + index : byte; + +begin + + high := str0[5]; { satunnainen kirjain, tai yli 100 000 } + delete(str0,5,1);{ pois } + chk1 := str0[2]; + delete(str0,2,1); + chk2 := str0[2]; + delete(str0,2,1); + +{ writeln('J„i: ',str0); } + + str1:=''; + + for index:=5 downto 1 do + str1:=str1+chr(ord(str0[index])-21); + + val(str1,luku1,luku2); + + if (ord(high)>74) then { ei pelkk„ satunnaiskirjain } + begin + luku1:=(100000*(ord(high)-75))+luku1; + end; + + str1[1]:=chr(68+2*(luku1 mod 7 xor 1)); + if (str1[1]<>chk1) then luku1:=0; + str1[1]:=chr(65+((jarj xor 33) mod 19)); + if (str1[1]<>chk2) then luku1:=0; + + uncrypt:=luku1; + +end; + + +function valuestr(str0:string;arvo:integer):word; +var word1,index:word; +begin + + word1:=0; + + for index:=1 to length(str0) do + begin +{ inc(word1,(ord(str0[index]))); } +{ inc(word1,((ord(str0[index])-63)*((index mod 5)+41))); } + inc(word1,((ord(str0[index]))*((index mod 5)+41))) +{ write(index mod 5,':',ord(str0[index]),':',word1,', ');} + + end; + + valuestr:=word1*(arvo mod 7+1)+arvo; + +end; + + +function svaluestr(str0:string;arvo:integer):word; +var word1,index:word; +begin + + word1:=0; + + for index:=1 to length(str0) do + begin +{ inc(word1,(ord(str0[index]))); } +{ inc(word1,((ord(str0[index])-63)*((index mod 5)+41))); } + case str0[index] of +{ 'A'..'Z','a'..'z','0'..'9',' ','.' : inc(word1,((ord(str0[index]))*((index mod 5)+41))); } + 'A'..'Z','a'..'z','0'..'9' : inc(word1,((ord(str0[index]))*((index mod 5)+41))); { v3.10 } + else inc(word1,3); + end; + +{ write(index mod 5,':',ord(str0[index]),':',word1,', ');} + + end; + + svaluestr:=word1*(arvo mod 7+1)+arvo; + +end; + + +procedure mainmenutext(phase:byte;version:string); +var x,y, temp, num : integer; +begin + + x:=11; + fontcolor(246); + + fillbox(11,80,11+fontlen(lstr(17)),85,8); +{ fillarea(11,80,11+fontlen(lstr(17]),85,63); } + + writefont(x,80,lstr(17+phase)); + + fontcolor(240); + + if (phase=1) then + begin + + FillBox(1,94,116,199,8); +{ FillArea(2,51,149,179,63); } + + for temp:=1 to 7 do + begin + y:=86+temp*12; + num:=temp; + if (temp=7) then begin inc(y,12); num:=0; end; +{$IFNDEF REG} + if (temp=4) then fontcolor(241); +{$ENDIF} + if (temp=5) then fontcolor(240); + writefont(x,y,txt(num)+' - '+lstr(temp+26)); + end; + + end; + + + if (phase=0) then + begin + for temp:=1 to 7 do + begin + y:=86+temp*12; + num:=temp; + if (temp=7) then begin inc(y,12); num:=0; end; + + writefont(x,y,txt(num)+' - '+lstr(temp+19)); + + end; + +{ fontcolor(241); } + +(* +{ fillbox(268,6,308,12,104); } + fillbox(268,6,307,11,164); +{ fillbox(245,18,308,24,134); } + fillbox(245,18,307,23,165); + fillbox(245,30,269,35,166); +*) + + end; + + ewritefont(308,6,'SKI JUMP'); + ewritefont(308,18,'INTERNATIONAL'); + writefont(245,30,'v'+version); + +end; + + +procedure newregtext(regname,regnumber:string); +begin + +{ fillbox(130,155,310,155,9); } + fillbox(128,155,312,155,9); + + fontcolor(240); + + writefont(132,163,lstr(35)+' '+lstr(36)); + +{ writefont(150,150,lstr(35]); + writefont(150,160,lstr(36]); } + +{ writefont(170,140,lstr(36]); } + fontcolor(246); +{ fillbox(139,172,311,197,250); + fillbox(140,173,310,196,245); } + +{ fillarea(140,173,310,196,63); } + + fillbox(132,175,308,196,248); + + writefont(140,177,regname); + { writefont(140,187,'#'+regnumber); } + + DrawScreen; + +end; + + + + +procedure newunregtext; +var temp : integer; +begin + + fillbox(130,120,310,120,9); + + fontcolor(240); + writefont(150,130,lstr(38)); + writefont(150,140,lstr(39)); + + temp:=(random(3)*2)+41; + + fontcolor(246); + + writefont(150,155,lstr(temp)); + writefont(150,165,lstr(temp+1)); + + fontcolor(240); + writefont(150,180,lstr(40)); + + DrawScreen; + +end; + + +procedure unregendtext; +begin + gotoxy(2,10); + cwrite(8,'- You have been playing an '); cwrite(31,'UNREGISTERED'); + cwriteln(8,' version of SJ3. '); +{ + writeln(' To rule the Universe and register SJ2, send 50 FIM or 10$ USD to '); + writeln(' Ville K”n”nen, Kalliopurontie 21 D 24, 02920 Espoo, Finland'); + write(' For an easier Internet registration or other details, see '); + cwriteln(15,'REGISTER.TXT'); +} + + write(' Please do the right thing,'); + writeln(' register SJ3! It''s cheap and easy, '); + write(' read '); cwrite(15,'REGISTER.TXT'); + cwriteln(8,' for step-by-step instructions.'); + +end; + + +procedure regendtext(regname,regnumber:string); +begin + gotoxy(2,10); + cwrite(8,'- YOU RULE!!!'); + writeln(' This version is registered to Everyone. '); + textcolor(15); + cwriteln(8,' Thanks for all the support!!!'); + +{ write(' This version is registered to: '); + textcolor(15); + writeln(sh(regname,25),' #',regnumber); + cwriteln(8,' Thanks a million for registering. I wish all users were like you.'); + writeln(' (But if you''re not ',sh(regname,32),', you should be ashamed.)'); + } + +end; + + + +procedure lopputext(version:string;a1,a2:Time); +var out : Time; + temp1, temp2, diff : longint; + +begin + + textcolor(0); + gotoxy(69,2);write(' Ûß Û'); + gotoxy(69,3);write(' Û Û'); + gotoxy(69,4);write('ÜÛ ÜÛ'); + + textcolor(4); + gotoxy(75,2);write('ßÛ'); + gotoxy(75,3);write('ūÛ'); + gotoxy(75,4);write('ÜÛ'); + + + temp1:=longint(a1.second)+longint(a1.minute)*60+longint(a1.hour)*3600; + temp2:=longint(a2.second)+longint(a2.minute)*60+longint(a2.hour)*3600; + + if (temp2 < temp1) then inc(temp2,86400); + + diff:=temp2-temp1; + + out.hour:=diff div 3600; + out.minute:=(diff div 60)-(out.hour*60); + out.second:=diff-(diff div 60)*60; + + gotoxy(2,2); + cwrite(15,'- You played SJ3 v'+version+' for'); + + if (out.hour>0) then + begin + write(' ',out.hour,' hour'); + if (out.hour>1) then write('s'); + + if (out.minute>0) and (out.second>0) then write(',') + else if (out.minute>0) or (out.second>0) then write(' and'); + + end; + + if (out.minute>0) then + begin + write(' ',out.minute,' minute'); + if (out.minute>1) then write('s'); + if (out.second>0) then write(' and'); + end; + + if (out.second>0) then + begin + write(' ',out.second,' second'); + if (out.second>1) then write('s'); + end; + + if (out.hour=0) and (out.minute=0) and (out.second=0) then write(' no time at all'); + writeln('. '); + + gotoxy(2,4); + cwriteln(8,'- Remember to send the SENDME.TXT result file '); + write(' to '); cwrite(15,'ville@nomasi.com'); + cwrite(8,' for the Universal Hall of Fame.'); + + gotoxy(2,7); + cwriteln(15,'- Be sure to check out the Official Ski Jump International'); + write(' webpage located at '); + cwrite(8,'http://www.nomasi.com/sj3/'); + + window(1,16,80,19); + textbackground(1); + clrscr; + writeln; + cwriteln(9,' Quote of the moment: '); + cwrite(15,' '); + + case random(40) of + 0 : writeln('Drama, excitement, speed, life, Ski Jump International.'); + 1 : writeln('"I traded K.I.T.T for Ski Jump International" - M. Knight'); + 2 : writeln('"Ski Jump International is out there" - F. Mulder'); + 3 : writeln('NSA, CIA, FBI, INTERPOL, SJ3 = ass-kicking action all the way'); + 4 : writeln('Ski Jump International - for the love of flying since 1994'); + 5 : writeln('"Only nuclear testing is more fun than SJ3" - J. Chirac'); +{ 6 : writeln('"We tried to add SJ3 to our new mobile, but it was too cool" - J. Ollila'); } + 6 : writeln('"Our new phone had SJ3 in it and nobody used it for talking" - J. Ollila'); + 7 : writeln('"Only exploiting Nigeria is more addictive than SJ3" - Shell Inc.'); + 8 : writeln('"Only exploiting the Amazonas is more fun than SJ3" - Texaco'); + 9 : writeln('"There shall be no tobacco advertising in SJ3" - European Union'); + 10 : writeln('S.J.3. - four letters that deliver pure enjoyment'); + 11 : writeln('Genesis, Exodus, Leviticus, Numeri, Deuterononium, SJ3'); + 12 : writeln('"SJ3 was not the reason for our comeback" - Spice Girls'); + 13 : writeln('"SJ3 can be explained with modern science" - D. Scully'); + 14 : writeln('"There is no cleaner sport than SJ3" - J. Samaranch'); + 15 : writeln('"We have warned SJ3 for it''s refusal to allow weapons inspectors" - USA'); + 16 : writeln('"SJ3 is a neo-communist plot and it must be stopped at any cost" - J. Helms'); + 17 : writeln('"Half of USA''s 396 Billion Dollar defense budget is spent on SJ3 regs"'); + 18 : writeln('"I made SJ3 out of fertilizer and window cleaner" - MacGyver'); + 19 : writeln('"Salt Lake City offered $700 000 in bribes to get into SJ3" - D. Pound'); + 20 : writeln('"SJ3 played a key part in our struggle for independence" - X. Gusmao'); +{ 21 : writeln('"Only blind retributions are more fun than SJ3" - G. W. Bush '); } + 21 : writeln('"We''ll bomb and invade any nation that uses pirate SJ3''s!" - G.W.Bush'); + 22 : writeln('Engineered with love and tradition from 1994 - SJ3'); + 23 : writeln('VX ANTHRAX AK-47 NWO FNORD G-7 NSA SJ3 PGP PRISM BLANKET IRA PLUTONIUM'); + 24 : writeln('"SJ3 is the only reason why I still use a Microsoft OS" - L. Torvalds'); + 25 : writeln('"SJ3 is banned in China for it''s pro-Tibetian views" - J. Zemin'); + 26 : writeln('"SJ3 is the last beacon of free press in Russia" - V. Guzinsky'); + 27 : writeln('SJ3 - no sex, no drugs, no violence - just the love of flying'); +{ 27 : writeln('"SJ3 is being investigated for terrorist links" - CIA'); } +{ 28 : writeln('"SJ3 is a great comfort "- N. Chomsky & S. Sontag'); } + 28 : writeln('"I am still the greatest, but SJ3 is getting damn close" - M. Ali'); + 29 : writeln('"I pity the fool who doesn''t play SJ3" - Mr.T'); + 30 : writeln('S is for Serenity, J is for Joy and 3 is for ... a Free Palestine!'); +{ 31 : writeln('"I own 13 Uzis, 10 shotguns and one SJ3. Try to rob me now." - C. Heston'); } + 31 : writeln('"We didn''t join the Euro as we can buy SJ3 with any currency" - DK, SE & UK'); + 32 : writeln('H2O, CO2, O2, SJ3 - stuff I can''t live without'); + 33 : writeln('Sex, drugs & SJ3'); + 34 : writeln('"The downloads of SJ3 are monitored because of its suspicious content" - NSA'); { max length } + 35 : writeln('SJ3 - almost as addictive as Coca-Cola and almost as fattening as McDonald''s'); + 36 : writeln('"SJ3 is more magic than me" - D. Blaine'); + 37 : writeln('"New Europe doesn''t need democratic decisions, it needs SJ3." - D. Rumsfeld'); + 38 : writeln('"As soon as I own SJ3, it will start to love me too." - S. Berlusconi'); + 39 : writeln('"I have never overstated anyones weapons or games. SJ3 is god." - T. Blair'); + 40 : writeln('"SJ3 inspired me to admit that we are illegal occupiers." - A. Sharon'); +{ 41 : writeln('"SJ3 is the only thing that separates us from animals. Except SJ3." - H. Simpson'); } + + end; + + textcolor(7); + + window(1,1,80,25); + + gotoxy(1,22); + +end; + +Procedure drawat(col1,col2,a,kr:integer;name:string); +begin + textcolor(col1); textbackground(col2); + + gotoxy(28,2+a); + if (kr>0) then write(' ',a,'. ',name,' K',kr,' ') + else write(' ** ',a,'. ',name,' ** '); + +end; + + +Function choosehill(mmaara:byte):byte; +var a,b:byte; +{ ch : char; } + +begin + + for a:=1 to mmaara do + drawat(14,1,a,HD[a]^.Kr,HD[a]^.Name); + + a:=1; + + repeat + + drawat(1,11,a,HD[a]^.Kr,HD[a]^.Name); + + gotoxy(32,2+a); + + readkbd(ch,ch2); + + b:=a; + + if (ch=#0) then + case ch2 of + #80 : if a1 then dec(a); + #71 : a:=1; + #79 : a:=mmaara; + { ' ','+' : if ht[f]=1 then ht[f]:=0 else ht[f]:=1; } + end; + + if (a<>b) then drawat(14,1,b,HD[b]^.Kr,HD[b]^.Name); + + until (ch=#27) or (ch=#13); + + if (ch=#27) then a:=255; + + window(1,1,80,25); + + choosehill:=a; + +end; + +procedure NewHDs; +var temp : integer; +begin + + if (SizeOf(Hillinfo_type)*(NumWCHills+MaxExtraHills+1) > MaxAvail) then + begin + writeln ('SJ3 Error: Out of memory when loading extra hills.'); + Waitforkey; + halt; + end; + + for temp:=0 to NumWCHills+MaxExtraHills do + New(HD[temp]); + +end; + +begin + + NewHDs; + +end. \ No newline at end of file diff --git a/TUULI.PAS b/TUULI.PAS new file mode 100644 index 0000000..ce21938 --- /dev/null +++ b/TUULI.PAS @@ -0,0 +1,140 @@ +Unit Tuuli; + +Interface + +procedure Piirra; +procedure Hae; +procedure Alusta(place:byte); +procedure Siirra; +procedure Tuo(x,y:integer); +procedure AsetaPaikka(place:byte); + +var voim,windy, value : integer; + +Implementation + +uses SJ3Graph, SJ3Help; + +var tsuun : boolean; { kiinnostaako n„m„ kaikkia? } + traja1, traja2 : integer; + tkulma : single; + tuulix, tuuliy:integer; + tpaikka : byte; + +procedure Tuo(x,y:integer); +begin + + tuulix:=x; + tuuliy:=y; + + case tpaikka of + 11 : begin inc(tuulix,10); dec(tuuliy,20); end; + 12 : begin inc(tuulix,15); dec(tuuliy,5); end; + 13 : begin dec(tuulix,10); inc(tuuliy,12); end; + end; + +end; + +procedure AsetaPaikka(place:byte); +begin + + tpaikka:=place; + + tuulix:=10; + tuuliy:=180; + + case tpaikka of + 1 : begin end; + 2 : tuuliy:=97; + 3 : tuulix:=268; + 4 : tuulix:=150; + 5 : begin tuulix:=268; tuuliy:=97; end; + 6 : begin tuulix:=268; tuuliy:=21; end; + 7 : begin tuulix:=150; tuuliy:=21; end; +{ 8 : begin tuulix:=7; tuuliy:=33; end; } + 8 : begin tuulix:=56; tuuliy:=33; end; + end; + + + +end; + + +procedure Alusta(place:byte); +var temp1,temp2 : byte; +begin + + temp1:=random(180); { Tuulen rajoja } + temp2:=random(120); + windy:=temp2; { ns. tuulisuusindeksi } + + traja1:=temp1-temp2; + traja2:=temp1+temp2; + tkulma:=random(temp2*2)+traja1; + voim:=random(50); + if random(2)=0 then tsuun:=true else tsuun:=false; + + AsetaPaikka(place); + + +end; + + +procedure Siirra; +begin + + if (tsuun) and (tkulma>traja2) then tsuun:=false; + if (tsuun=false) and (tkulma0) then + fillbox(tuulix+22,tuuliy+1,tuulix+22+value div 3,tuuliy+2,236); + + if (value<0) then + fillbox(tuulix+20+value div 3,tuuliy+1,tuulix+20,tuuliy+2,237); + + s:=txtp(abs(value)); + + if (value<0) then writefont(tuulix+10,tuuliy+5,'-'); + + writefont(tuulix+15,tuuliy+5,s[1]); + writefont(tuulix+24,tuuliy+5,s[3]); + +end; + + +begin + + Alusta(0); + +end. \ No newline at end of file