The
First Annual Blades of Exile
Programming Contest Rules
Description
A BoE programming contest,
where entries are not entire scenarios, but a single code sequence that performs
some effect, task, etc.
Purpose
To generate and provide a library of heavily-documented routines for the BoE community. After the contest, the code sequences will be organized into towns within a scenario(s), with a reference chart so you can locate a particular code segment. This will in some cases give you access to code ready to use. In most cases, it will give you access to code ready to modify. In worst cases, it will give you a working example you can examine when building your own code.
Contest Dates
Entrance
Requirements
Submission Rules
All submissions must be sent via e-mail to bxb11@psu.edu by the entry deadline. All e-mails must have BoE Programming Contest Submission in the Subject line, or they will be discarded. If for some technical reason you cannot e-mail your submission, it is your responsibility to post it to a Web or FTP site where the contest coordinator can easily obtain it, and to inform via e-mail bxb11@psu.edu how to obtain the submission.
Judgment Criteria
& Scoring Rubric (50 points possible for a perfect submission)
(All judges will use this rubric to evaluate all submissions.)
Originality (0-10)
|
0=
|
Very common - used everywhere. |
|
1=
|
Quite common. Used often. |
|
2=
|
Somewhat common. |
|
3=
|
Used before, but not overly so. |
|
4=
|
Seen in several scenarios. |
|
5=
|
Seems like an altercation or moderate improvement of a previously used sequence. |
|
6=
|
Unique but not very useful. |
|
7=
|
Unique and somewhat useful. |
|
8=
|
Quite original or a vast and/or creative improvement on a previous code. |
|
9=
|
Unique and very useful in many circumstances. |
|
10=
|
Never seen before this designer's use of it, revolutionary, a totally new concept that has the potential to greatly strengthen all future scenarios using it. |
Documentation and Legibility
(0-5)
|
0=
|
No documentation. |
|
1=
|
Too difficult to follow, OR contains many spelling/grammar errors. |
|
2=
|
Documentation can be followed, but with great difficulty, OR part of it is missing, OR contains some minor spelling/grammar errors. |
|
3=
|
Documentation is complete, but is difficult to follow. It may be hard to exactly recreate the code sequence. No spelling/grammar errors. |
|
4=
|
Documentation is complete and can be followed. It is possible to exactly recreate the code sequence. No obvious spelling/grammar errors. |
|
5=
|
Extremely thorough and well explained. It is easy to recreate the code sequence. No obvious spelling/grammar errors. |
Efficiency (0-5)
|
0=
|
Totally inefficient and bulky, there are obvious better ways to code this. |
|
1=
|
Inefficient and bulky in two or more areas, there are obvious better ways to code this. |
|
2=
|
Inefficient and bulky in one area, there is an obvious better way to code it. |
|
3=
|
Can be improved somewhat, but not in an obvious way. |
|
4=
|
Mostly concise, but could be improved in a minor way. |
|
5=
|
Concise. Cannot be condensed further without compromising function. |
Usefulness (0-15)
|
0=
|
Not useful at all and/or too buggy to use. |
|
3=
|
Usefulness is limited dependant on highly contrived and/or unusual situations. |
|
5=
|
Usefulness is limited dependant on somewhat contrived situations. |
|
8=
|
Usefulness is somewhat limited, requires specific plot parameters for use, but can be generally justified without feeling too contrived. |
|
10=
|
Definitely applicable to some situations, may require some general and minor plot modification and fitting to implement. However, these modifications can be easily justified. |
|
13=
|
Can potentially improve most scenarios if applied. Modifications are easy to implement. |
|
15=
|
Revolutionary, will improve all scenarios if applied. Modifications are easy to implement. |
Additional Bonus Points (0-15)
Awarded for extra creativity and innovation. The purpose of this category is
to allow judges to go beyond just the facts, judging each submission
on its unique merits.
These points are awarded at the judges discretion. For example, customized
graphics only need to be described in the accompanying documentation. However,
if customized graphics are needed for the programming submission and are included
in both .BMP and .MEG format, the judge may decide to award 10 points in this
category, especially if the graphics are of high quality and are gamma-corrected
for each platform. If the graphics are submitted for only one platform, or are
not gamma corrected, perhaps only 5 points are awarded.
These can be used towards overall presentation points as well. For instance,
just handing in a sequence would not earn points in this category. But actually
presenting it and explaining it in the editor (via a quasi-scenario) would definitely
merit some extra points.
Judges and Judging
A call for judges will go out in January 2002. Anyone who responds to the call
prior to Feb. 1st 2002 may be a judge. All judges will receive a judging template
containing the judging rubric (see above). All judges must utilize the provided
rubric to assess each code sequence, submitting one completed rubric per code
sequence. All judging scores must be received by March 15th or they will not
be included in the contest results. No one may judge their own contest submissions.
Appendix A: Special Node Nomenclature
The purpose of this appendix is to give designers a standard nomenclature for
describing their creations, so judges can easily understand what the designed
intended. If the judge cannot understand the documentation easily, then the
score should be lowered accordingly. It is suggested that designers follow these
standards closely. However, some variation may be appropriate.
***** Notes *****
* Use GOTO to signify which node to jump to in a sequence
* Use END to signify that the sequence ends
* If no GOTO or END is placed, the next node called is the one immediately following
it
* Write nodes in numeric order beginning with zero
* Sometimes an option is given denoted by OR. Post ONLY the appropriate option
* Place all notes in the description followed by a double slash, //
*****
General Nodes *****
- Set SDF x,y = z
- Increment SDF x,y by z NOTE: z is a positive or negative integer
- Display Msg ("Short Text Description")
- Secret Passage
- Display Sm Msg ("Short Text Description")
- Flip SDF x,y
- Out Block (can enter OR no enter) NOTE: include either "can enter"
or "no enter" in () for all blocks
- Town Block (can enter OR no enter)
- Combat Block (can enter OR no enter)
- Looking Block
- Can't Enter (can enter OR no enter)
- Change Time z NOTE: z is a positive or negative integer (yes it is possible
to move time backwards)
- Start General Timer, x moves, CALL Global Spec A
- Play Sound x
- Change Horse Possession, "Horse #", (Not Property OR Becomes Property)
- Change Boat Possession, "Boat #", (Not Property OR Becomes Property)
- Show Town x NOTE: Hide town feature does NOT work
- Major Event x Occurred
- Forced Give; "Item Given"; ("Text Desc"); IF NOT Given
GOTO A; ELSE GOTO B NOTE: Forced Give does NOT actually force.
- Buy Items of Type "Item Desc" for x; IF NO items GOTO A; ELSE GOTO
B NOTE: x is the amount of gold paid per item.
- Call Global Spec A
- Set Many Flags x = z NOTE: x is the first value in the flag coordinate
- Copy Flag x,y; Paste to a,b NOTE: flag a,b becomes equal to flag x,y
- Ritual of Sanct. Block; IF NOT Casting Ritual GOTO A; ELSE GOTO B
- Have Rest for x moves, restore y NOTE: y is HP/SP restored
- Wandering Will Fight (Attack OR No Attack)
- End Scenario
*****
One Shot Nodes *****
[x,y] = flag that is "one-time", place in brackets for clarity
- Give Item [x,y] "Item Desc", 'a' gold, 'b' food; ("Text");
IF NOT Given GOTO A; ELSE GOTO B Note: Only necessary to place used fields.
If no food is given, that part can be omitted.
- Give Special Item [x,y] "Special Item Desc" (Give OR Take Away)
- One-Time Do Nothing [x,y]
- One-Time and Set [x,y]
- Display Dialog [x,y] ("Text Desc"); IF 'Option 1' GOTO A; IF 'Option
2' GOTO B; ELSE GOTO C NOTE: 'Option 1', etc are replaced by appropriate choice
(yes, no, attack, etc.). ELSE signifies to the leave/ok option. If ELSE condition
is absent, no leave/ok option presented.
- Give Item (Dialog) [x,y] ("Text Desc"); Special Item = "Special
Item Desc", Item = "Item Desc", 'a' gold, 'b' food; IF Item TAKEN
GOTO A; ELSE GOTO B NOTE: Only necessary to place used fields. If no food is
given, that part can be omitted.
- One-Time Out Enc [x,y] z, ("Text Desc") NOTE: z is the encounter
number which is defined
- One-Time Town Enc [x,y] z, ("Text Desc") NOTE: z is the encounter
number which is defined
- Trap [x,y] ("Text"); Type = 'a'; Severity = 'b'; Penalty = 'c' NOTE:
If trap stats not important may be omitted. Also special ends if party chooses
to not attempt disarm.
*****
Affect PCs *****
x = the number of a statistic to give/remove. Be sure the number is within appropriate
parameters
Include any text in parenthesis after the node
- Select PC (Only Living OR Any); IF 'Cancel' Picked GOTO A, ELSE GOTO B
- Do Damage xdy + z; Type = Physical, Magic, Fire, etc NOTE: x,y,z are positive
integers ex. 4d5 + 10
- Affect Health by x (Raise OR Lower)
- Affect Spell Points by x (Raise OR Lower)
- Affect Experience by x (Raise OR Lower)
- Affect Skill Points by x (Raise OR Lower)
- Kill/Raise Dead; Dead, Dust, OR Stone (Kill OR Raise Dead)
- Affect Poison by x (Adds OR Removes)
- Affect Slow/Haste by x (Hastes OR Slows)
- Affect Invulnerability by x (Adds OR Removes)
- Affect Magic Resistance by x (Adds OR Removes)
- Affect Webs by x (Adds OR Removes) NOTE: Editor reverses of add/remove; write
code description as if there was no error, but account for when coding.
- Affect Disease by x (Adds OR Removes)
- Affect Sanctuary by x (Adds OR Removes)
- Affect Curse/Bless by x (Blesses OR Curses)
- Affect Dumbfounding by x (Adds OR Removes)
- Affect Sleep by x (Adds OR Removes)
- Affect Paralysis by x (Adds OR Removes)
- Affect Statistic by x; Strength, Dexterity, Mage Lore, etc.; y% (Gives OR
Takes)
- Give Mage Spell x NOTE: x is number of spell
- Give Priest Spell x NOTE: x is number of spell
- Affect Gold by x (Gives OR Takes)
- Affect Food by x (Gives OR Takes)
- Affect Alchemy x NOTE: x is recipe number to give
- Affect Stealth by x
- Affect Firewalk by x
- Affect Flying by x
*****
If-Thens *****
NOTE: Some nodes have a (+ take) option. Where appropriate, include it in the
node description ex. IF Have x Gold (+ take) THEN..., OR IF Have Item Class
(+ take) z THEN...
- IF SDF x,y >= 'a' THEN GOTO A; IF < 'b' THEN GOTO B; ELSE GOTO C
- IF Town Number = x THEN GOTO A; ELSE GOTO B
- IF Random Number < x THEN GOTO A; ELSE GOTO B
- IF Have Spec Item x, THEN GOTO A; ELSE GOTO B
- IF SDF x,y < a,b THEN GOTO A; ELSE GOTO B NOTE: This is 'Stuff Done Compare?'
- IF Terrain Type x,y = z THEN GOTO A; ELSE GOTO B NOTE: x,y is map coordinate,
z is terrain description
- IF Have x Gold THEN GOTO A; ELSE GOTO B
- IF Have x Food THEN GOTO A; ELSE GOTO B
- IF Item Class z on x,y THEN GOTO A; ELSE GOTO B NOTE: z is defined item class;
x,y is map coordinate
- IF Have Item Class z THEN GOTO A; ELSE GOTO B NOTE: z is defined item class
- IF Equip Item Class z THEN GOTO A; ELSE GOTO B NOTE: z is definited item class
- IF Day x Reached THEN GOTO A; ELSE GOTO B
- IF Any Barrels THEN GOTO A; ELSE GOTO B
- IF Any Crates THEN GOTO A; ELSE GOTO B
- IF Day x Reached AND Event y Not Occurred, THEN GOTO A; ELSE GOTO B NOTE:
This is 'Special Thing Happened?'
- IF Have Cave Lore THEN GOTO A; ELSE GOTO B
- IF Have Woodsman THEN GOTO A; ELSE GOTO B
- IF Have x Mage Lore THEN GOTO A; ELSE GOTO B
- IF Text Response matches (within 'x' letters): 'Option A' THEN GOTO A; IF
'Option B' THEN GOTO B; ELSE GOTO C NOTE: 'Option A' etc may be replaced with
appropriate response or left a general response for the actual designer to choose.
"Letter Tolerence" may be omitted as may a second choice if unnecessary.
- IF SDF x,y = z THEN GOTO A; ELSE GOTO B
*****
Town Specials *****
x,y = map coordinate
Include any text in parenthesis after the node
- Town Hostile
- Change Terrain x,y to 'Terrain Desc'
- Swap Terrain x,y; 'Terrain 1' with 'Terrain 2'
- Transform Terrain x,y
- Move Party to x,y (Move OR Teleport)
- Hit Space x,y for z Damage NOTE: Node has been know to cause problems if killing
a monster
- Explosion on Space x,y of Radius r for z Damage; Type = Physical, Fire, etc.
NOTE: Node has been know to cause problems if killing a monster
- Lock Space x,y
- Unlock Space x,y
- Do SFX Burst on x,y (fire, elec, OR telep) NOTE: electical and teleportion
explosions are reversed, write code description as if bug did not exist, but
account for when coding.
- Make Wandering Monster
- Place Monster 'Monster Name' at x,y (Force OR NOT Force) NOTE: focing monsters
can cause crashes if maximum number of monsters reached.
- Destroy Monster 'Monster Name'
- Destroy All Monsters (Hostile, Friendly, OR All)
- Generic Lever; IF Pulled GOTO A; ELSE GOTO B
- Generic Portal to x,y
- Generic Button; IF Pushed GOTO A; ELSE GOTO B
- Generic Stairway to x,y in Town z (up, down, etc); GOTO A NOTE: GOTO is optional,
but it goes to node 'A' in the town the party goes to, not the initial town.
- Lever IF Pulled GOTO A; ELSE GOTO B
- Portal to x,y
- Stairway to x,y in Town z (Always Change Level) NOTE: Always Change Level
is optional, omit if not used. Also, if used, no text shall be displayed.
- Relocate Outdoors to Out Sect x,y at coordinates a,b
- Place Item 'Item Desc' at x,y
- Split Party to x,y (Play Telep Noise, No Telep Noise) NOTE: Blades does not
'like' splitting the party.
- Reuinite Party (Play Telep Noise, No Telep Noise)
- Start General Timer, x moves, call Spec A NOTE: The General Timers in the
General Nodes menu calls only scenario/global specials
- Place Field x% within top, left, bottom, right NOTE: Replace top, left, etc.
with coordinate numbers. Replace 'Field' with appropriate type, e.g. fire, ice,
blade, etc.
- Move Items from top, left, bottom, right to x,y NOTE: Move Item nodes only
works for one space.
- Destroy Items; top, left, bottom, right NOTE: Move Item nodes only works for
one space.
- Change Rect Terrain to 'Terrain Type'; x%; top, left, bottom, right
- Swap Rect Terrain; 'Terrain 1' with 'Terrain 2'; top, left, bottom, right
- Transform Rect Terrain; top, left, bottom, right
- Lock Rect Terrain; top, left, bottom, right
- Unlock Rect Terrain; top, left, bottom, right
*****
Outdoor Specs *****
Include any text in parenthesis after the node
- Make Out Wandering
- Change Out Terrain x,y to 'Terrain Type'
- Place Out Enc x
- Out Move Party to x,y
- Out Store
*****
Example 1 *****
// Opens a locked door at 31,7 if the party has the appropriate, key -- a special
item.
// First checks to see if door is locked, if so, it proceeds to check if the
party has the key. If not, nothing happens.
// If door is locked, checks to see if has a key. If party does, the door unlocks
allowing the party to proceed. If not, a message is displayed saying the party
requires a key.
// Special Item 4 = Key
0 - IF Terrain Type 31,7 = Impassible Door THEN GOTO 1; ELSE END
1 - IF Have Spec Item 4, THEN GOTO 3; ELSE GOTO 2
2 - Display Msg ("The door is locked, you need a key"); END
3 - Play Sound 9 // Lock Click
4 - Change Terrain 31,7 to Unlocked Door; ("The key unlocks the door");
END
*****
Example 2 *****
// Party needs to pay a toll of 50 gold upon reaching a bridge or buy a pass
for 500 gold that allows unconditional access.
// The guards will let the party pass without a fee if they have slain the vile
Rattinford, a local bandit leader.
// 50,0 - Has party paid toll?; 0 - No, 1 - Paid
// 50,1 - Killed Rattinford?; 0 - No, 1 - Killed
// 50,2 - One-time killed Rattinford, you may pass whenever desc
// Special Item 7 = Bridge Pass
// Upon reaching the bidge:
0 - IF SDF 50,0 >= 1 THEN END; ELSE GOTO 1
1 - IF SDF 50,1 >= 1 THEN GOTO 2; ELSE GOTO 3
2 - Display Dialog [50,2] ("You've killed Rattinford, you may pass whenever
you like"); END
3 - Display Dialog ("You must pay either a 50 gold fee or buy a 500 gold
pass. 1 = Pay 50 gold fee, 2 = Buy 500 gold pass"); IF '1' GOTO 4; IF '2'
GOTO 8; ELSE GOTO 6
4 - IF Have 50 Gold (+take) THEN GOTO 7; ELSE GOTO 5
5 - Display Msg (Not enough gold)
6 - Can't Enter (No enter); END
7 - Set SDF 50,0 = 1; (You pay the fee and the guards let you pass); END
8 - IF Have 500 Gold (+take) THEN GOTO 9; ELSE GOTO 5
9 - Give Special Item 7
10 - Set SDF 50,0 = 2; (You buy a permanent pass); END
// Upon leaving the town, call the sequece to reset 50,0 back to 0 if the party
does not have the permanent pass.
// Makes sure the guards demand payment again
11 - IF SDF 50,0 < 2 THEN GOTO 12; ELSE END
12 - Set SDF 50,0 = 0; END
Questions? Comments? Please contact Brett Bixler.