Really nice suggestions! As I'd love to see more customization of competitions in DSJ4, I was also preparing a draft proposal of customization of World Cup mode few weeks ago, which could be based on XML file. The proposal considers multiple classifications, unlimited number of training, qualification and competition sessions, defining startlist based on specific classification, etc. so number of hardcoded rules is as minimal as possible. Such configuration schema would cover basically all individual World Cup scenarios, such as 'regular' competitions, 4 Hills Tournament, Raw Air, World Championships, Ski Flying Competitions/Championships, Season Finale and possibly many more. It would also allow to arrange non-real tournaments, such as 'King of the Hill' from SJ3. I didn't pay attention to team competitions though.
At first glance it seems a bit complicated and obviously would require a lot of development and UI changes. But this would be a really big step into adding more variety into the game, especially if it was implemented into Online game. This would allow private server owners to create fun competitions that don't have to base on real Ski Jumping rulesets.
I prepared an XML with comments and sample competitions. I didn't pay much attention to BIBs, element/attribute naming (some descriptions would seem unclear) and omitted a lot of potentially customizable stuff. Feel free to use/comment this draft proposal - I (and many other DSJ4 players) would be very grateful if such thing was possible.
Code: Select all
<tournament>
<!--
Definitions of all classifications that will be used in tournament. First defined classification will be marked
as the main and default one.
type - (points/wc/jump/place) type of classification, described later
ref - unique name of classification, used for referencing in 'competitions' elements
description - name of classification displayed in game
visible - (true/false) classification is visible in game. It is useful for 'utility' classifications that are
not meant to be visible. Default value: true
-->
<classifications>
<!--
Points are added up by place achieved at the end of competition. Number of points is defined in child elements.
Jumpers who will not pass through qualification round, will not get any points.
-->
<classification type="points" ref="wc" description="World Cup">
<points place="1">100</points>
<points place="2">80</points>
<points place="3">60</points>
<points place="4">50</points>
<points place="5">45</points>
<points place="10">30</points>
(...)
</classification>
<!--
This is same as "points" classification type, but predefined with standard World Cup scoring system.
-->
<classification type="wc" ref="wc" description="Other World Cup"/>
<!--
Points are added up based on total result achieved by jumper in competition. Only competition rounds count.
Jumpers who will not pass through qualification round, will not get any points.
-->
<classification type="jump" ref="4ht" description="Four Hills Tournament"/>
<classification type="jump" ref="wch_normal" description="World Championships - Normal Hill"/>
<classification type="jump" ref="wch_large" description="World Championships - Large Hill"/>
<classification type="jump" ref="sfwc" description="Ski Flying World Championships"/>
<classification type="jump" ref="rawair" description="Raw Air"/>
<!--
Points are added up by place achieved at the end of competition. For example, if competition has 75 jumpers,
points go the following way:
1st place - 75
2nd place - 74
...
74th place - 2
75th (last) place - 1
Number of points is based on number of jumpers taking part in competition. Jumpers who will not pass through
qualification round, will not get any points.
-->
<classification type="place" ref="other-tour" description="Some other tournament"/>
</classifications>
<competitions>
<competition date="2022-12-20" hour="18:00" hill="Kranj HS109">
<!--
define how many jumpers are allowed in this competition
type:
all - every registered jumper
top - top X jumpers from specified classification
bottom - bottom X jumpers from specified classification
top_country - top X jumpers from specified classification from each country
bottom_country - bottom X jumpers from specified classification from each country
ref: classification reference, use 1st defined if not specified
limit: number of jumpers allowed to start (empty, 0 - allow all)
-->
<allowed type="all"/>
<!--
Defines jumpers order and bibs for competition. In case if specified classification is empty, use
'main' classification. If 'main' classification is empty, use startlist based from user selection
in game and do not generate leader BIB.
ref: classification reference, use default one if not specified
order: (asc/desc) startlist ordering. asc - from worst to best jumper. desc - from best to worst
jumper. Default value: asc
leaderbib: (true/false) jumper on 1st place has leader BIB. Default value: true
draw: (random/startlist) decide what to do in case if several jumpers have same number of points.
Default value: startlist
random: random ordering
startlist: ordering defined by startlist based from user selection in game
-->
<startlist ref="wc" order="asc" leaderbib="true" draw="random"/>
<!-- Define rounds for this competition. Rounds are played in the same order as they are defined. -->
<!--
Training round. Jumpers cannot be knocked out. There can be multiple training rounds, placed
anywhere. Only jumpers that passed through last qualifying round are allowed in this training session.
score: (jump/distance/distance-cm/judge-3/judge-5/distance-points) which jump result should be
taken for total score calculation. Default value: distance-points
changeweather: (true/false) change wind conditions (and other weather parameters) with this session.
Default value: false
-->
<training score="distance-points"/>
<training/>
<training/>
<!--
Qualification rounds. Jumpers can be knocked out, jump points are not taken into account in
competition. There can be multiple qualification rounds, in that case jumpers will highest points sum
will pass through.
limit: number of jumpers that will qualify to next round
rounds: number of rounds that will be played for this qualification. Default: 1
skip: (true/false) skip this qualification round if number of jumpers starting in this round is
less or equal than number defined in 'limit' attribute. Default value: false
exact: (true/false) specifies if only exact number of jumpers defined in 'limit' attribute can
qualify:
- if there are several jumpers in last qualified place (e.g. 4 jumpers at 50th place),
qualify jumpers with highest BIB
- crash rule doesn't apply
Default value: false
score: (jump/distance/distance-cm/judge-3/judge-5/distance-points) which jump result should be
taken for total score calculation. Default value: jump
preq: number of jumpers that will be pre-qualified. Only jumpers with highest BIBs will be
pre-qualified. Default value: 0
newstartlist: (true/false) use new BIBs for this and further rounds (until another round with
newstartlist=true). If true, results of previous round will be used as a startlist for
this round. Jumpers will receive new BIBs. Leader BIB will be still assigned to
classification leader (as long as startlist/leaderbib is set to true).
Default value: false
changeweather: (true/false) change wind conditions (and other weather parameters) with this session.
Default value: false
-->
<qualification limit="50" rounds="2" skip="false" exact="true" score="jump" preq="10"/>
<training/>
<!--
Competition rounds. Jumpers can be knocked out, final placement and result is based on sum of jump
points scored in all rounds. Only jumpers who participate at least in one competition round can
score points in any classification.
type: (default/ko) type of competition round. If this is a KO round, jumpers will get new BIBs
based on their placement in previous round/qualification. (e.g. first place - 1,
last place - 50). Default value: default
limit: number of jumpers that will qualify to next round
exact: (true/false) specifies if only exact number of jumpers defined in 'limit' attribute can
qualify:
- if there are several jumpers in last qualified place (e.g. 4 jumpers at 50th place),
qualify jumpers with highest BIB (lowest in KO-based startlist)
- crash rule doesn't apply
Default value: false
score: (jump/distance/distance-cm/judge-3/judge-5/distance-points) which jump result should be
taken for total score calculation. Default value: jump
newstartlist: (true/false) use new BIBs for this and further rounds (until another round with
newstartlist=true). If true, results of previous round will be used as a startlist for
this round. Jumpers will receive new BIBs. Leader BIB will be still assigned to
classification leader (as long as startlist/leaderbib is set to true).
Default value: false. For KO rounds, this setting is always true, and cannot be changed
to false.
changeweather: (true/false) change wind conditions (and other weather parameters) with this session.
Default value: false
-->
<round type="default" limit="30" exact="false" score="jump"/>
<round/>
<!--
Define classifications that will be updated after this competition.
ref: classification reference
qualification: take sum of all qualification jumps into final score (applies only if classification
type is 'jump').
-->
<classification ref="wc"/>
<classification ref="rawair" qualification="true"/>
</competition>
(...)
<!-- example of Four Hills Tournament competition -->
<competition date="2022-12-29" hour="18:00" hill="Oberstdorf HS137">
<allowed type="top" ref="wc" limit="75"/>
<startlist ref="wc"/>
<training/>
<qualification limit="50"/>
<round type="ko" limit="30"/>
<round/>
<classification ref="wc"/>
<classification ref="4ht"/>
</competition>
(...)
<!-- example of World Championships -->
<competition date="2023-01-16" hour="12:00" hill="Planica HS102">
<allowed type="top_country" ref="wc" num="4"/>
<startlist ref="wc" order="asc" leaderbib="true" draw="random"/>
<training/>
<qualification limit="50"/>
<round type="default" limit="30"/>
<round/>
<classification ref="wch_normal"/>
</competition>
<competition date="2023-01-19" hour="12:00" hill="Planica HS138">
<allowed type="top_country" ref="wc" num="4"/>
<startlist ref="wc" order="asc" leaderbib="true" draw="random"/>
<training/>
<qualification limit="50"/>
<round type="default" limit="30"/>
<round/>
<classification ref="wch_large"/>
</competition>
(...)
<!-- example of Ski Flying World Championships -->
<competition date="2023-02-25" hour="16:00" hill="Vikersund HS240">
<allowed type="top_country" ref="wc" num="4"/>
<startlist ref="wc" order="asc" leaderbib="true" draw="random"/>
<training/>
<qualification limit="40"/>
<round type="default" limit="30"/>
<round/>
<round/>
<round/>
<classification ref="sfwc"/>
</competition>
</competitions>
</tournament>