<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2716.2200" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>I was checking out the code that returns messages 
for rods and wands and horns (in player.c) because I wanted to make an item that 
recharged like a rod.&nbsp; Looking at the code the messages for ranged attacks 
are hard coded and there are case statements to spit them out depending on the 
item type.&nbsp;</FONT></DIV>
<DIV><FONT face=Arial size=2>looks like this:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>case range_wand:<BR>&nbsp;&nbsp;&nbsp; 
for(weap=op-&gt;inv;weap!=NULL;weap=weap-&gt;below)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(weap-&gt;type==WAND&amp;&amp;QUERY_FLAG(weap, 
FLAG_APPLIED))<BR>&nbsp;break;<BR>&nbsp;&nbsp;&nbsp; if(weap==NULL) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_draw_info(NDI_UNIQUE, 0,op,"You have no 
wand readied.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
op-&gt;contr-&gt;count_left=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
if(weap-&gt;stats.food&lt;=0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
play_sound_player_only(op-&gt;contr, 
SOUND_WAND_POOF,0,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
new_draw_info(NDI_UNIQUE, 0,op,"The wand says 
poof.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; 
if(cast_spell(op,weap,dir,op-&gt;contr-&gt;chosen_item_spell,0,spellWand,NULL)) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET_FLAG(op, FLAG_BEEN_APPLIED); /* You now 
know something about it */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(!(--weap-&gt;stats.food))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;object 
*tmp;<BR>&nbsp;if (weap-&gt;arch) {<BR>&nbsp;&nbsp; CLEAR_FLAG(weap, 
FLAG_ANIMATE);<BR>&nbsp;&nbsp; weap-&gt;face = 
weap-&gt;arch-&gt;clone.face;<BR>&nbsp;&nbsp; weap-&gt;speed = 
0;<BR>&nbsp;&nbsp; update_ob_speed(weap);<BR>&nbsp;}<BR>&nbsp;if 
((tmp=is_player_inv(weap)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
esrv_update_item(UPD_ANIM, tmp, weap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp; case range_rod:<BR>&nbsp; case 
range_horn:<BR>&nbsp;&nbsp;&nbsp; 
for(weap=op-&gt;inv;weap!=NULL;weap=weap-&gt;below)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(QUERY_FLAG(weap, FLAG_APPLIED)&amp;&amp;<BR>&nbsp; 
weap-&gt;type==(op-&gt;contr-&gt;shoottype==range_rod?ROD:HORN))<BR>&nbsp;break;<BR>&nbsp;&nbsp;&nbsp; 
if(weap==NULL) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char 
buf[MAX_BUF];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf(buf, "You have no %s 
readied.",<BR>&nbsp;op-&gt;contr-&gt;shoottype == range_rod ? "rod" : 
"horn");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_draw_info(NDI_UNIQUE, 0,op, 
buf);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
op-&gt;contr-&gt;count_left=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
if(weap-&gt;stats.hp&lt;spells[weap-&gt;stats.sp].sp) {<BR>#if 
0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOG(llevDebug,"Horn/rod: %d &lt; %d (%d)\n", 
weap-&gt;stats.hp, spells[weap-&gt;stats.sp].sp, 
weap-&gt;stats.sp);<BR>#endif<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
play_sound_player_only(op-&gt;contr, 
SOUND_WAND_POOF,0,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(op-&gt;contr-&gt;shoottype == range_rod)<BR>&nbsp;new_draw_info(NDI_UNIQUE, 
0,op,"The rod whines for a while, but nothing 
happens.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
else<BR>&nbsp;new_draw_info(NDI_UNIQUE, 
0,op,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "No matter 
how hard you try you can't get another note 
out.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; 
if(cast_spell(op,weap,dir,op-&gt;contr-&gt;chosen_item_spell,0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
op-&gt;contr-&gt;shoottype == range_rod ? spellRod : spellHorn,NULL)) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET_FLAG(op, FLAG_BEEN_APPLIED); /* You now 
know something about it */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
drain_rod_charge(weap);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
return;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;I propose a small change here which I am not 
yet competent to execute.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>1. Like to see two new item types - rodlike (for 
recharging items) and wandlike (for rechargable items).&nbsp; not sure what the 
best actual names should be... 'misc_rodlike' and 'misc_wandlike' ?</FONT></DIV>
<DIV><FONT face=Arial size=2>2. the player.c range code changed adding in a 
second case called 'range_misc_wandlike' to the wand portion and a third case 
called 'range_misc_rodlike' to the rod/horn portion which works off the else 
statement which&nbsp;will spit out generic messages like </FONT></DIV>
<DIV><FONT face=Arial size=2>' the %s&nbsp;seems to be out of juice' 
&nbsp;rather than the specific ones.&nbsp; </FONT></DIV>
<DIV><FONT face=Arial size=2>In the wand section there would be an 'if - else' 
&nbsp;similar to the way the rod/horn section works, and for the rod/horn 
section there would be an 'if - if - else' if you get my drift 
here.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>something like this for wands</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>case range_wand</FONT></DIV>
<DIV><FONT face=Arial size=2>case range_misc_wandlike</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; do this:</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(op-&gt;contr-&gt;shoottype == range_wand)</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; do this:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  do this:</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; do this:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>and this for rods/horns</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>case range_rod</FONT></DIV>
<DIV>case range_horn</DIV>
<DIV><FONT face=Arial size=2>case range_misc_wandlike</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; do this:</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if 
(op-&gt;contr-&gt;shoottype == range_rod)</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp; do this:<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if 
(op-&gt;contr-&gt;shoottype == range_horn)</FONT></DIV>
<DIV>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; do this:</DIV>
<DIV><FONT face=Arial 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; do this:</FONT></DIV>
<DIV>&nbsp;&nbsp;&nbsp; do this:</DIV>
<DIV>&nbsp;</DIV>
<DIV>This I think would be pretty simple to change but then again&nbsp;there 
could be more to it than that&nbsp;since I am still puzzling my way along 
here.&nbsp; Any thoughts?</DIV>
<DIV>It would allow for a whole bunch of new special items to be made which 
would be fun if not functionally too different.How about a magic stone of 
summoning or a teakettle of steambolt, or what I was trying to make 'Lythander's 
pipe of wonder' and 'Lythander's pipe of mass confusion'</DIV>
<DIV>&nbsp;</DIV>
<DIV>Just a suggestion.</DIV>
<DIV>-tm</DIV></FONT></DIV></BODY></HTML>