void _rodeo_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Rodeo"); break; case SPELL_DESC: var_set_string(res, ""); break; case SPELL_CAST: { char m_name[80]; monster_type *m_ptr; monster_race *r_ptr; int rlev; var_set_bool(res, FALSE); if (p_ptr->riding) { msg_print("You are already riding."); return; } if (!do_riding(TRUE)) return; var_set_bool(res, TRUE); m_ptr = &m_list[p_ptr->riding]; r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); msg_format("You ride on %s.", m_name); if (is_pet(m_ptr)) break; rlev = r_ptr->level; if (r_ptr->flags1 & RF1_UNIQUE) rlev = rlev * 3 / 2; if (rlev > 60) rlev = 60+(rlev-60)/2; if ( randint1(skills_riding_current() / 120 + p_ptr->lev * 2 / 3) > rlev && one_in_(2) && !p_ptr->inside_arena && !p_ptr->inside_battle && !(r_ptr->flags7 & RF7_GUARDIAN) && !(r_ptr->flags1 & RF1_QUESTOR) && rlev < p_ptr->lev * 3 / 2 + randint0(p_ptr->lev / 5) ) { msg_format("You tame %s.", m_name); set_pet(m_ptr); } else { msg_format("You have thrown off by %s.", m_name); rakuba(1,TRUE); p_ptr->riding = 0; } break; } default: default_spell(cmd, res); break; } }
/**************************************************************** * Spells ****************************************************************/ static void _kiss_spell(int cmd, variant *res) { switch (cmd) { case SPELL_NAME: var_set_string(res, "Kiss"); break; case SPELL_DESC: var_set_string(res, "Attempt to charm an adjacent monster."); break; case SPELL_COST_EXTRA: var_set_int(res, p_ptr->lev * 2); break; case SPELL_CAST: { int y, x, dir = 0, m_idx; var_set_bool(res, FALSE); if (!get_rep_dir2(&dir)) return; if (dir == 5) return; y = py + ddy[dir]; x = px + ddx[dir]; m_idx = cave[y][x].m_idx; if (m_idx) { monster_type *m_ptr = &m_list[m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; char desc[MAX_NLEN]; monster_desc(desc, m_ptr, 0); if ((r_ptr->flags1 & RF1_UNIQUE) || mon_save_p(m_ptr->r_idx, A_CHR)) { set_monster_csleep(m_idx, 0); if (is_hostile(m_ptr)) { switch (randint1(10)) { case 1: msg_format("%^s says 'Impudent Strumpet!'", desc); break; case 2: msg_format("%^s says 'Ewwww! Gross!!'", desc); break; case 3: msg_format("%^s says 'You ain't my type!'", desc); break; default: msg_format("%^s resists your charms.", desc); } if (allow_ticked_off(r_ptr)) { m_ptr->anger_ct++; } } else msg_format("%^s ignores you.", desc); } else { if (is_pet(m_ptr)) msg_format("%^s slobbers on you affectionately.", desc); else if (is_friendly(m_ptr)) { set_pet(m_ptr); msg_format("%^s is charmed!", desc); } else { set_friendly(m_ptr); msg_format("%^s suddenly becomes friendly.", desc); } } var_set_bool(res, TRUE); } else { msg_print("There is no monster."); } break; } default: default_spell(cmd, res); break; } }