boomerang path (trunk only)
Thrown boomerangs travelled in a clockwise path, appropriate for left-handed throwing. But nethack heroes are treated as right-handed by the weapon wielding and shield wearing code, so make boomerangs travel counterclockwise instead. Switching is straightforward, in case we ever implement user-specified or random handedness.
This commit is contained in:
@@ -181,6 +181,7 @@ same-race sacrifice can't damage high altars
|
|||||||
allow corpses on floor to be offered at high altars
|
allow corpses on floor to be offered at high altars
|
||||||
allow hero to attempt to offer the Amulet at ordinary altars
|
allow hero to attempt to offer the Amulet at ordinary altars
|
||||||
shooting range for crossbow isn't affected by strength; multi-shot volley is
|
shooting range for crossbow isn't affected by strength; multi-shot volley is
|
||||||
|
right-handed boomerang throw travels counterclockwise
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
26
src/zap.c
26
src/zap.c
@@ -3082,17 +3082,31 @@ struct obj *obj;
|
|||||||
int dx, dy;
|
int dx, dy;
|
||||||
{
|
{
|
||||||
register int i, ct;
|
register int i, ct;
|
||||||
int boom = S_boomleft; /* showsym[] index */
|
int boom; /* showsym[] index */
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
|
boolean counterclockwise = TRUE; /* right-handed throw */
|
||||||
|
|
||||||
|
/* counterclockwise traversal patterns:
|
||||||
|
* ..........................54.................................
|
||||||
|
* ..................43.....6..3....765.........................
|
||||||
|
* ..........32.....5..2...7...2...8...4....87..................
|
||||||
|
* .........4..1....6..1...8..1....9...3...9..6.....98..........
|
||||||
|
* ..21@....5...@...7..@....9@......@12....@...5...@..7.....@9..
|
||||||
|
* .3...9....6..9....89.....................1..4...1..6....1..8.
|
||||||
|
* .4...8.....78.............................23....2..5...2...7.
|
||||||
|
* ..567............................................34....3..6..
|
||||||
|
* ........................................................45...
|
||||||
|
* (invert rows for corresponding clockwise patterns)
|
||||||
|
*/
|
||||||
|
|
||||||
bhitpos.x = u.ux;
|
bhitpos.x = u.ux;
|
||||||
bhitpos.y = u.uy;
|
bhitpos.y = u.uy;
|
||||||
|
boom = counterclockwise ? S_boomleft : S_boomright;
|
||||||
for (i = 0; i < 8; i++) if (xdir[i] == dx && ydir[i] == dy) break;
|
for (i = 0; i < 8; i++) if (xdir[i] == dx && ydir[i] == dy) break;
|
||||||
tmp_at(DISP_FLASH, cmap_to_glyph(boom));
|
tmp_at(DISP_FLASH, cmap_to_glyph(boom));
|
||||||
for (ct = 0; ct < 10; ct++) {
|
for (ct = 0; ct < 10; ct++) {
|
||||||
if(i == 8) i = 0;
|
i = (i + 8) % 8; /* 0..7 (8 -> 0, -1 -> 7) */
|
||||||
boom = (boom == S_boomleft) ? S_boomright : S_boomleft;
|
boom = (S_boomleft + S_boomright - boom); /* toggle */
|
||||||
tmp_at(DISP_CHANGE, cmap_to_glyph(boom));/* change glyph */
|
tmp_at(DISP_CHANGE, cmap_to_glyph(boom));/* change glyph */
|
||||||
dx = xdir[i];
|
dx = xdir[i];
|
||||||
dy = ydir[i];
|
dy = ydir[i];
|
||||||
@@ -3126,11 +3140,13 @@ int dx, dy;
|
|||||||
}
|
}
|
||||||
tmp_at(bhitpos.x, bhitpos.y);
|
tmp_at(bhitpos.x, bhitpos.y);
|
||||||
delay_output();
|
delay_output();
|
||||||
if(ct % 5 != 0) i++;
|
|
||||||
#ifdef SINKS
|
#ifdef SINKS
|
||||||
if(IS_SINK(levl[bhitpos.x][bhitpos.y].typ))
|
if(IS_SINK(levl[bhitpos.x][bhitpos.y].typ))
|
||||||
break; /* boomerang falls on sink */
|
break; /* boomerang falls on sink */
|
||||||
#endif
|
#endif
|
||||||
|
/* ct==0, initial position, we want next delta to be same;
|
||||||
|
ct==5, opposite position, repeat delta undoes first one */
|
||||||
|
if (ct % 5 != 0) i += (counterclockwise ? -1 : 1);
|
||||||
}
|
}
|
||||||
tmp_at(DISP_END, 0); /* do not leave last symbol */
|
tmp_at(DISP_END, 0); /* do not leave last symbol */
|
||||||
return (struct monst *)0;
|
return (struct monst *)0;
|
||||||
|
|||||||
Reference in New Issue
Block a user