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 judge’s 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.