
Rulebook
CAUTION: Contains gameplay spoilers!
For advanced players interested in insight on the DH game mechanics…
NOTE: Throughout the following discussion, these definitions hold…
0dN means RNG 0 to N-1 (e.g. 0d5 means a value 0 to 4, inclusive)
1dN means RNG 1 to N (e.g. 1D10 means a value 1 to 10, inclusive)
The personas corresponds to both a level-of-difficultly and a kind of “character class” selection. ALCYONE is the default NORMAL choice. SIDON has more health, arrows, defense, making him the EASY choice. The other choices give a variety of game-play challenges, where we will see which selection ends up getting the best game-time score results.

MAX. STAMINA = 1000
ACTUAL LAND MOVEMENT STAMINA COST = (9 – LAND) * 60
ACTUAL WATER MOVEMENT STAMINA COST = (9 – WATER) * 90
EVERY 1/8th SECOND REGENERATE 0d200 STAMINA
(orb makes this fixed 300)
BOW STAMINA COST TO FIRE = (0d300)+100
MINIMUM STAMINA FOR ACTION = 100
(stamina can go negative, but a positive stamina is required to perform an action)
ACTIONS are MOVING and FIRING. Rotating bow does not cost stamina.
ACTUAL RANGE = RANGE * 2
ACTUAL STEALTH = SENSE RANGE = ((9 – STEALTH)*2) – 1
ACTUAL DEFENSE IS INTERGER ROUND DIVIDED by 2.
DEF = (DEF+1)/2 (e.g. DEF 8à DEF 4, DEF 5à DEF 3)
CHALLENGE HIT FAILURE IS: 0d10 < ACTUAL_DEFENSE
PLAYER HIT SUCCESS IS 0d10 < ATTACK
DIRECTION
The DIRECTION given at the very beginning is cosmetic only (e.g. banner borders). However, the dot position when pressing SPACE becomes a MOD_VALUE (1-10 inclusive). This MOD_VALUE is used in an ultra-secret formula that is applied during CHIMES, where that formula decides BLESS, AGAIN, or PASS conditions. The CHIMES are also used to determine a total SEED_VALUE that is passed into srand() to initialize the RNG. (DIRECTION got its name since it decided which direction the SEED_VALUE was accumulated: positive vs negative).
NOTE: The backstory implication here is that ultimately we do not choose the DIRECTION we are created with, perhaps it is divinely inspired.
Keyboard Handling
Keyboard commands are processed in two priority groups:
PRIORITY 1 is minimum 1/30th second delay: (2 JIFFIES)
SPACE, P, B, O, 4, 6, 8, 5, NUM-PAD 0, F
PRIORITY 2 is minimum 1/15th second delay: (4 JIFFIES)
W, A, S, D movement keys
“AI” Logic of CHALLENGES
The CHALLENGE MOVE and ATT. SPEED are “delay time” values, which means: higher value is SLOWER. Generally, the attack speed is slower than movement (these are 1/60th JIFFY counts; blessings DOUBLE these times {except 0 becomes 2}).
RATIONALE: The CHALLENGES attack box is any square around their icon (+1 along all edges). While the player can shoot at a distance, they can only fire one arrow at a time. It was deemed unfair that the challenges had such a large attack box, and got a chance-to-hit roll during each movement. And so, it was decided to slow-down their attack speed by use of a separate timer. This costs some memory and performance, but the game is much more balanced.

NOTE: Because of STAMINA and only being able to fire one arrow at a time, the player does not have an equivalent MOVE SPEED and ATTACK SPEED. But with that in mind, with full stamina, the players MOVE SPEED would be equivalent to about 2. The ATTACK SPEED depends on the persona range, but would be a minimum of 4. The players equivalent ATTACK SPEED is probably more around 8-14. The players arrow speed itself is SPEED 0, meaning it moves as fast as the main loop allows.
CHALLENGE stats have these characteristics:
- Higher HP is STRONGER
- Higher AGG (aggressiveness) is MORE FIERCE (more likely to chase).
- CHALLENGES navigate up to 4 target points, some points are RNG.
- When a CHALLENGE reaches a TARGET point, they RNG decide to:
go to NEXT TARGET, go to PREVIOUS TARGET, go to RANDOM TARGET. - Before doing the next target decision, CHALLENGES always LOITER first. When LOITERING, may randomly move in X and Y for several cycles (0-10).
NOTE: I removed NEXT/PREVIOUS target options due to memory constraints, plus the result is effectively no different than just choosing a RANDOM TARGET anyway.
CHALLENGES attack only during the GOING state. If player enters SENSE region, there is a (0d100 < AGG) chance the CHALLENGE will chase the player (dynamic 5th target point) to their current position (except fireballs do not chase). NOTE: This technically skews the ATTACK SPEED of the challenges, since they do not roll-for-attack while LOITERING. Except, it may be unclear when they are in GOING vs LOITERING state (and it cost too much memory/runtime to add an indicator). This adds a bit of a “surprise effect” on if/when they will actually attack. But in testing, I found we had to reduce all the LOITERING counts to keep things more balanced.
When CHALLENGE HP reaches 0, they first become DEAD1 state on map (ARROW). Player may collect 1D10 arrows at this DEAD location, which upon doing so then transitions map tile to DEAD2 state (X).
The Stealth Mechanic
Applies to all borders of CHALLENGE ICON, which are 5×3 cells at most:

NOTE: For final release (as of May 17), the “attack box” was increased to “+2” on all sides instead of “+1”. Earlier BETA releases are “+1”.
Before game play begins, the STEALTH value is “inverted” into a SENSE range, to effectively indicate how FAR the CHALLENGES can sense the player. Initially we were going to have STEALTH be an RNG threshold, as a PROBABILITY of being sensed — but it would have be rolled during the movement of everything, and just end up feeling very unbalanced.