Update of /cvsroot/exult/./exult/content/sifixes/src/items In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30882/content/sifixes/src/items Modified Files: bucket_cure.uc hourglass.uc pillar.uc potion.uc scroll.uc time_tellers.uc Log Message: * BG Keyring Mod and SI Fixes are now licensed under the GNU GPL. * For the BG Keyring Mod, I also modified a bit the NPC spellcasting items and routines, and started work in a spellcasting pseudo-AI. Index: bucket_cure.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/bucket_cure.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- bucket_cure.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ bucket_cure.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,52 +1,69 @@ -/* - * This file has been created from usecode found in the Exult CVS snapshot. - * I include it here only for convenience; I have edited it to fit the - * conventions used in the rest of the mod. - * - * The original code was written by Jeff Freedman (aka "DrCode"). - * - * I modified the code so that the companions will have time to join - * before Xenka returns, as well as having a better post-resurrection, - * post-insanity dialog. - * - */ - -DumpBucket 0x88A () -{ - var target = UI_click_on_item(); - if (!target) - return; - - UI_printf(["The shape clicked on is %s", UI_get_item_shape(target)]); - - var npcnum = target[1]->get_npc_number(); // It's item, position. - var bucket_quality = get_item_quality(); - var handled = false; - - if (get_item_frame() == 1) - { - if ((npcnum == CANTRA) && (bucket_quality == QUALITY_LOGIC)) - { - CANTRA->set_schedule_type(WAIT); - //Without UI_set_path_failure, Cantra's would be stuck in waiting mode if - //the player moved the Avatar before reaching Cantra: - if (UI_path_run_usecode([target[2], target[3], target[4]], CureCantra, item, PATH_SUCCESS)) - UI_set_path_failure(CureCantra, item, PATH_FAILURE); - abort; - } - else if (((npcnum == DUPRE) && (bucket_quality == QUALITY_DISCIPLINE)) || - ((npcnum == SHAMINO) && (bucket_quality == QUALITY_ETHICALITY)) || - ((npcnum == IOLO) && (bucket_quality == QUALITY_LOGIC))) - { - npcnum->set_schedule_type(WAIT); - - if (UI_path_run_usecode([target[2], target[3], target[4]], CureCompanion, item, PATH_SUCCESS)) - UI_set_path_failure(CureCompanion, item, PATH_FAILURE); - abort; - } - } - - // Let orig. function handle it. - target->set_intercept_item(); - DumpBucket.original(); -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * + * This file has been created from usecode found in the Exult CVS snapshot. + * I include it here only for convenience; I have edited it to fit the + * conventions used in the rest of the mod. + * + * The original code was written by Jeff Freedman (aka "DrCode"). + * + * I modified the code so that the companions will have time to join + * before Xenka returns, as well as having a better post-resurrection, + * post-insanity dialog. + */ + +DumpBucket 0x88A () +{ + var target = UI_click_on_item(); + if (!target) + return; + + UI_printf(["The shape clicked on is %s", UI_get_item_shape(target)]); + + var npcnum = target[1]->get_npc_number(); // It's item, position. + var bucket_quality = get_item_quality(); + var handled = false; + + if (get_item_frame() == 1) + { + if ((npcnum == CANTRA) && (bucket_quality == QUALITY_LOGIC)) + { + CANTRA->set_schedule_type(WAIT); + //Without UI_set_path_failure, Cantra's would be stuck in waiting mode if + //the player moved the Avatar before reaching Cantra: + if (UI_path_run_usecode([target[2], target[3], target[4]], CureCantra, item, PATH_SUCCESS)) + UI_set_path_failure(CureCantra, item, PATH_FAILURE); + abort; + } + else if (((npcnum == DUPRE) && (bucket_quality == QUALITY_DISCIPLINE)) || + ((npcnum == SHAMINO) && (bucket_quality == QUALITY_ETHICALITY)) || + ((npcnum == IOLO) && (bucket_quality == QUALITY_LOGIC))) + { + npcnum->set_schedule_type(WAIT); + + if (UI_path_run_usecode([target[2], target[3], target[4]], CureCompanion, item, PATH_SUCCESS)) + UI_set_path_failure(CureCompanion, item, PATH_FAILURE); + abort; + } + } + + // Let orig. function handle it. + target->set_intercept_item(); + DumpBucket.original(); +} Index: hourglass.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/hourglass.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- hourglass.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ hourglass.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,83 +1,102 @@ -//Reimplemented so that Thoxa no longer gets summoned in Spinebreaker Mountains -//unless there is a corpse there. Selina's body is there, so this isn't much of -//an issue... - -Hourglass shape#(0x347) () -{ - var pos; - var notincombat; - var nearbynpcs; - var index; - var max; - var npc; - var pathegg; - - //Hourglass of the Timelord...errr, Fate - if (event == DOUBLECLICK) - { - if (get_item_frame() == 1) - { - pos = get_object_position(); - //Check to see if the banes have been released. If they have, do not - //force summon Thoxa, but summon her in the normal way - if (pointInsideRect(pos, [0x910, 0x170], [0x93F, 0x19F]) && !gflags[BANES_RELEASED]) - { - UI_close_gumps(); - UI_play_sound_effect(0x30); - obj_sprite_effect(9, 0, 0, 0, 0, 0, -1); - abort; - } - - notincombat = true; - nearbynpcs = AVATAR->find_nearby(SHAPE_ANY, 10, 4); - for (npc in nearbynpcs with index to max) - { - if (npc->get_schedule_type() == IN_COMBAT) - { - notincombat = false; - break; - } - } - - if (notincombat) - { - if (areThereBodiesNearby()) - { - pos = AVATAR->get_object_position(); - //Offset Thoxa a bit so that she isn't INSIDE avatar: - var framerot = AVATAR->get_item_frame_rot(); - if (framerot - EAST_FRAMESET >= 0) - pos[X] = pos[X] + 5; - else if (framerot - WEST_FRAMESET >= 0) - pos[X] = pos[X] - 5; - else if (framerot - SOUTH_FRAMESET >= 0) - pos[Y] = pos[Y] + 5; - else - pos[Y] = pos[Y] - 5; - - THOXA->move_object(pos); - THOXA->faceAvatar(); - THOXA->set_schedule_type(TALK); - THOXA->obj_sprite_effect(7, 0, 0, 0, 0, 0, -1); - UI_play_sound_effect(0x0051); - - pathegg = getPathEgg(2, 1); - if (pathegg) - UI_play_music(0x3F, pathegg); - - UI_close_gumps(); - } - else - { - UI_play_sound_effect(0xE); - obj_sprite_effect(13, 0, 0, 0, 0, 0, -1); - } - } - else - { - UI_play_sound_effect(0x30); - obj_sprite_effect(9, 0, 0, 0, 0, 0, -1); - } - } - } -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Reimplemented so that Thoxa no longer gets summoned in Spinebreaker Mountains + * unless there is a corpse there. Selina's body is there, so this isn't much of + * an issue... + */ + +Hourglass shape#(0x347) () +{ + var pos; + var notincombat; + var nearbynpcs; + var index; + var max; + var npc; + var pathegg; + + //Hourglass of the Timelord...errr, Fate + if (event == DOUBLECLICK) + { + if (get_item_frame() == 1) + { + pos = get_object_position(); + //Check to see if the banes have been released. If they have, do not + //force summon Thoxa, but summon her in the normal way + if (pointInsideRect(pos, [0x910, 0x170], [0x93F, 0x19F]) && !gflags[BANES_RELEASED]) + { + UI_close_gumps(); + UI_play_sound_effect(0x30); + obj_sprite_effect(9, 0, 0, 0, 0, 0, -1); + abort; + } + + notincombat = true; + nearbynpcs = AVATAR->find_nearby(SHAPE_ANY, 10, 4); + for (npc in nearbynpcs with index to max) + { + if (npc->get_schedule_type() == IN_COMBAT) + { + notincombat = false; + break; + } + } + + if (notincombat) + { + if (areThereBodiesNearby()) + { + pos = AVATAR->get_object_position(); + //Offset Thoxa a bit so that she isn't INSIDE avatar: + var framerot = AVATAR->get_item_frame_rot(); + if (framerot - EAST_FRAMESET >= 0) + pos[X] = pos[X] + 5; + else if (framerot - WEST_FRAMESET >= 0) + pos[X] = pos[X] - 5; + else if (framerot - SOUTH_FRAMESET >= 0) + pos[Y] = pos[Y] + 5; + else + pos[Y] = pos[Y] - 5; + + THOXA->move_object(pos); + THOXA->faceAvatar(); + THOXA->set_schedule_type(TALK); + THOXA->obj_sprite_effect(7, 0, 0, 0, 0, 0, -1); + UI_play_sound_effect(0x0051); + + pathegg = getPathEgg(2, 1); + if (pathegg) + UI_play_music(0x3F, pathegg); + + UI_close_gumps(); + } + else + { + UI_play_sound_effect(0xE); + obj_sprite_effect(13, 0, 0, 0, 0, 0, -1); + } + } + else + { + UI_play_sound_effect(0x30); + obj_sprite_effect(9, 0, 0, 0, 0, 0, -1); + } + } + } +} Index: pillar.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/pillar.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- pillar.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ pillar.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,10 +1,29 @@ -//This is to prevent the Test of Purity bug in Serpent Fang. - -Pillar shape#(0x2AF) () -{ - if ((event == DOUBLECLICK) && (get_item_frame() == 10) && - !pointInsideRect(get_object_position(), [0x741, 0x9E5], [0x746, 0x9EA])) - return; - else - Pillar.original(); -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * This is to prevent the Test of Purity bug in Serpent Fang. + */ + +Pillar shape#(0x2AF) () +{ + if ((event == DOUBLECLICK) && (get_item_frame() == 10) && + !pointInsideRect(get_object_position(), [0x741, 0x9E5], [0x746, 0x9EA])) + return; + else + Pillar.original(); +} Index: potion.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/potion.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- potion.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ potion.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,110 +1,129 @@ -//I did this so the companions can refuse Blue potions while on Spinebreaker Mountains. -//It also is a good learning exercise... - -extern healByAmount 0x976 (var target, var amount); - -enum potions -{ - SLEEP_POTION = 0, - HEALING_POTION = 1, - CURING_POTION = 2, - POISION_POTION = 3, - AWAKENING_POTION = 4, - PROTECTION_POTION = 5, - LIGHT_POTION = 6, - INVISIBILITY_POTION = 7, - MANA_POTION = 8, - WARMTH_POTION = 9 -}; - -Potion shape#(0x154) () -{ - var itemframe; - var target; - - if (event == DOUBLECLICK) - { - itemframe = get_item_frame(); - target = UI_click_on_item(); - - UI_play_sound_effect2(0x24, item); - if (target->is_npc()) - { - UI_play_sound_effect(0x39); - if (itemframe == SLEEP_POTION) - { - var npcnum = target->get_npc_number(); - if ((getAvatarLocationID() == SPINEBREAKER_MOUNTAINS) && ((npcnum == IOLO) || (npcnum == SHAMINO) || (npcnum == DUPRE))) - { - npcnum.say("@But we are so close to Batlin now, Avatar! I don't want to miss all the action!@"); - abort; - } - target->set_item_flag(ASLEEP); - } - - else if (itemframe == HEALING_POTION) - healByAmount(target, UI_die_roll(3, 12)); - - else if (itemframe == CURING_POTION) - { - target->clear_item_flag(POISONED); - target->clear_item_flag(PARALYZED); - target->clear_item_flag(ASLEEP); - target->clear_item_flag(CHARMED); - target->clear_item_flag(CURSED); - } - - else if (itemframe == POISION_POTION) - target->set_item_flag(POISONED); - - else if (itemframe == AWAKENING_POTION) - target->clear_item_flag(ASLEEP); - - else if (itemframe == PROTECTION_POTION) - target->set_item_flag(PROTECTION); - - else if (itemframe == LIGHT_POTION) - UI_cause_light(200); - - else if (itemframe == INVISIBILITY_POTION) - target->set_item_flag(INVISIBLE); - - else if (itemframe == MANA_POTION) - { - if (target == AVATAR->get_npc_object()) - { - var mana = AVATAR->get_npc_prop(MANA); - var recover = UI_get_random(10); - if ((mana + recover) > 31) - recover = (31 - mana); - - AVATAR->set_npc_prop(MANA, recover); - } - } - - else if (itemframe == WARMTH_POTION) - target->set_temperature(0); - - else if (itemframe >= 10) - { - partyUtters(1, "@What is this!@", 0, false); - abort; - } - remove_item(); - abort; - } - else - { - var pos = [target[X + 1], target[Y + 1], target[Z + 1]]; - partyUtters(1, "@Please, " + getPoliteTitle() + ", waste them not!@", 0, false); - var spill = UI_create_new_object(SHAPE_SPILL); - if (spill) - { - spill->set_item_flag(TEMPORARY); - spill->set_item_frame(UI_die_roll(4, 23)); - UI_update_last_created(pos); - } - remove_item(); - } - } -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * I did this so the companions can refuse Blue potions while on Spinebreaker + * Mountains. It also is a good learning exercise... + */ + +extern healByAmount 0x976 (var target, var amount); + +enum potions +{ + SLEEP_POTION = 0, + HEALING_POTION = 1, + CURING_POTION = 2, + POISION_POTION = 3, + AWAKENING_POTION = 4, + PROTECTION_POTION = 5, + LIGHT_POTION = 6, + INVISIBILITY_POTION = 7, + MANA_POTION = 8, + WARMTH_POTION = 9 +}; + +Potion shape#(0x154) () +{ + var itemframe; + var target; + + if (event == DOUBLECLICK) + { + itemframe = get_item_frame(); + target = UI_click_on_item(); + + UI_play_sound_effect2(0x24, item); + if (target->is_npc()) + { + UI_play_sound_effect(0x39); + if (itemframe == SLEEP_POTION) + { + var npcnum = target->get_npc_number(); + if ((getAvatarLocationID() == SPINEBREAKER_MOUNTAINS) && ((npcnum == IOLO) || (npcnum == SHAMINO) || (npcnum == DUPRE))) + { + npcnum.say("@But we are so close to Batlin now, Avatar! I don't want to miss all the action!@"); + abort; + } + target->set_item_flag(ASLEEP); + } + + else if (itemframe == HEALING_POTION) + healByAmount(target, UI_die_roll(3, 12)); + + else if (itemframe == CURING_POTION) + { + target->clear_item_flag(POISONED); + target->clear_item_flag(PARALYZED); + target->clear_item_flag(ASLEEP); + target->clear_item_flag(CHARMED); + target->clear_item_flag(CURSED); + } + + else if (itemframe == POISION_POTION) + target->set_item_flag(POISONED); + + else if (itemframe == AWAKENING_POTION) + target->clear_item_flag(ASLEEP); + + else if (itemframe == PROTECTION_POTION) + target->set_item_flag(PROTECTION); + + else if (itemframe == LIGHT_POTION) + UI_cause_light(200); + + else if (itemframe == INVISIBILITY_POTION) + target->set_item_flag(INVISIBLE); + + else if (itemframe == MANA_POTION) + { + if (target == AVATAR->get_npc_object()) + { + var mana = AVATAR->get_npc_prop(MANA); + var recover = UI_get_random(10); + if ((mana + recover) > 31) + recover = (31 - mana); + + AVATAR->set_npc_prop(MANA, recover); + } + } + + else if (itemframe == WARMTH_POTION) + target->set_temperature(0); + + else if (itemframe >= 10) + { + partyUtters(1, "@What is this!@", 0, false); + abort; + } + remove_item(); + abort; + } + else + { + var pos = [target[X + 1], target[Y + 1], target[Z + 1]]; + partyUtters(1, "@Please, " + getPoliteTitle() + ", waste them not!@", 0, false); + var spill = UI_create_new_object(SHAPE_SPILL); + if (spill) + { + spill->set_item_flag(TEMPORARY); + spill->set_item_frame(UI_die_roll(4, 23)); + UI_update_last_created(pos); + } + remove_item(); + } + } +} Index: scroll.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/scroll.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- scroll.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ scroll.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,166 +1,185 @@ -Scroll shape#(0x31D) () -{ - var quality = get_item_quality(); - UI_play_sound_effect2(0x5E, item); - book_mode(); - if (quality == 0xBD) - { - - say("The list of items which we found ourselves with after the storm:~~"); - say("Prepared by Shamino."); - if (gflags[DUPRE_MADE_EQUIPMENT_LIST]) - say("With additional notes by Dupre."); - if (gflags[IOLO_MADE_EQUIPMENT_LIST]) - say("And further comments by Iolo, since being freed from that vile Monitorian prison cell!"); - say("~~"); - - if (gflags[STORM_PINECONE]) - { - if (gflags[KNOWS_PINECONE_OWNER]) - say("A pinecone from the northern woods."); - else - say("A pinecone (or, at least, it appears to be one)."); - } - - if (gflags[STORM_STOCKINGS]) - { - if (gflags[KNOWS_MOONSILK_OWNER]) - say("A pair of moonsilk stockings, such as the enchantress Columna doth wear."); - else - say("A fine pair of sheer stockings, probably women's attire."); - } - - if (gflags[STORM_URN]) - { - if (gflags[KNOWS_URN_ORIGIN]) - say("A funerary urn containing the Ashes of the Dead, taken from the Caves of Monitor."); - else - say("Some sort of vase, with soot inside."); - } - - if (gflags[STORM_LAB_APPARATUS]) - { - if (gflags[KNOWS_LAB_APPARATUS_OWNER]) - say("The missing apparatus from the laboratory of Erstam, the so-called Mad Mage."); - else if (gflags[HAS_CLUE_LAB_APPARATUS]) - say("A specimen of laboratory apparatus from a mage's laboratory."); - else - say("A strange apparatus of glass and copper."); - } - - if (gflags[STORM_PUMICE]) - { - if (gflags[KNOWS_PUMICE_ORIGIN]) - say("A pumice rock from the fiery depths of some dungeon."); - else - say("A rock."); - } - - if (gflags[STORM_WEDDING_RING]) - { - if (gflags[KNOWS_RING_OWNER]) - say("The engagement ring belonging to Alyssand of Fawn."); - else if (gflags[HAS_CLUE_RING]) - say("A finely crafted silver ring, probably the lost engagement ring of a lass named Alyssand."); - else - say("A finely crafted ring, of silver, of a size to fit a small woman or a child."); - } - - if (gflags[STORM_FUR_CAP]) - { - if (gflags[KNOWS_FURCAP_OWNER] || gflags[GAVE_FURCAP_BACK]) - say("The elegant fur cap which Filbercio the MageLord purchased for his favorite, the sorceress Frigidazzi."); - else if (gflags[HAS_CLUE_FURCAP]) - say("An expensive fur cap, which the MageLord of Moonshade obtained for one of his many lovers."); - else - say("A ridiculous fur cap."); - } - - if (gflags[STORM_SLIPPERS]) - { - if (gflags[KNOWS_SLIPPERS_OWNER]) - say("The well-worn slippers belonging to Devra, the mistress of the Inn of the Sleeping Bull."); - else - say("Some very old and worn slippers, such as might be worn in the privacy of one's home."); - } - - if (gflags[STORM_BREAST_PLATE]) - { - if (gflags[KNOWS_BREAST_PLATE_OWNER]) - say("The ceremonial breastplate of the Priestess of Beauty, who is Kylista of Fawn. A very attractive lady, I should add."); - else - say("An enameled breastplate, suitable for ceremonial occasions."); - } - - if (gflags[STORM_BLUE_EGG]) - { - if (gflags[KNOWS_BLUE_EGG_OWNER]) - say("A penguin egg, such as may be found in the ice fields of the distant north."); - else - say("A strange blue egg."); - } - - if (gflags[STORM_GOBLIN_BRUSH]) - { - if (gflags[KNOWS_GOBLIN_BRUSH_ORIGIN]) - say("A grisly brush made from the bones of some poor victim of the Goblins. How foul!"); - else - say("A crude brush."); - } - - if (gflags[STORM_ICEWINE]) - { - if (gflags[KNOWS_ICEWINE_ORIGIN]) - say("A bottle of that excellent vintage of wine sold by the Rangers of Moonshade. Why, I should sample some now..."); - else - say("A bottle of ice wine -- whatever that is!"); - } - - if (gflags[STORM_FILARI]) - { - if (gflags[KNOWS_FILARI_OWNER]) - say("Jeweled coins from the City of Beauty, Fawn."); - else - say("Strange baubles -- silver disks with jewels in the center."); - } - - if (gflags[STORM_BEAR_SKULL]) - { - if (gflags[KNOWS_BEAR_SKULL_ORIGIN]) - say("The skull of a great mountain bear."); - else - say("A large skull, no doubt belonging to some large and dead animal."); - } - - if (gflags[STORM_SEVERED_HAND]) - { - if (gflags[KNOWS_SEVERED_HAND_OWNER]) - say("The severed hand from one of the Mad Mage's experiments. It is not dead, yet not living -- it doth not decay."); - else - say("A bloody hand, severed from its corpse. It shows no sign of decay, yet..."); - } - - if (gflags[STORM_MONITOR_SHIELD]) - { - if (gflags[KNOWS_MONITOR_SHIELD_ORIGIN]) - //I changed this one from the original: - //say("One of the common shields used by the Pikemen of Monitor."); - say("A sturdy shield belonging to Luther of Monitor."); - //Added a brand new one: - else if (gflags[HAS_CLUE_MONITOR_SIHELD]) - say("A shield from Monitor which possibly belongs to Luther."); - else - say("An inexpensive shield, sturdy and suitable for battle."); - } - - if (gflags[STORM_RUDDY_ROCK]) - { - if (gflags[KNOWS_STONEHEART_ORIGIN]) - say("The dangerous mineral known as Stoneheart, which is used to produce the illegal reagent Bloodspawn."); - else - say("A red hunk of stone."); - } - } - else - Scroll.original(); -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +Scroll shape#(0x31D) () +{ + var quality = get_item_quality(); + UI_play_sound_effect2(0x5E, item); + book_mode(); + if (quality == 0xBD) + { + + say("The list of items which we found ourselves with after the storm:~~"); + say("Prepared by Shamino."); + if (gflags[DUPRE_MADE_EQUIPMENT_LIST]) + say("With additional notes by Dupre."); + if (gflags[IOLO_MADE_EQUIPMENT_LIST]) + say("And further comments by Iolo, since being freed from that vile Monitorian prison cell!"); + say("~~"); + + if (gflags[STORM_PINECONE]) + { + if (gflags[KNOWS_PINECONE_OWNER]) + say("A pinecone from the northern woods."); + else + say("A pinecone (or, at least, it appears to be one)."); + } + + if (gflags[STORM_STOCKINGS]) + { + if (gflags[KNOWS_MOONSILK_OWNER]) + say("A pair of moonsilk stockings, such as the enchantress Columna doth wear."); + else + say("A fine pair of sheer stockings, probably women's attire."); + } + + if (gflags[STORM_URN]) + { + if (gflags[KNOWS_URN_ORIGIN]) + say("A funerary urn containing the Ashes of the Dead, taken from the Caves of Monitor."); + else + say("Some sort of vase, with soot inside."); + } + + if (gflags[STORM_LAB_APPARATUS]) + { + if (gflags[KNOWS_LAB_APPARATUS_OWNER]) + say("The missing apparatus from the laboratory of Erstam, the so-called Mad Mage."); + else if (gflags[HAS_CLUE_LAB_APPARATUS]) + say("A specimen of laboratory apparatus from a mage's laboratory."); + else + say("A strange apparatus of glass and copper."); + } + + if (gflags[STORM_PUMICE]) + { + if (gflags[KNOWS_PUMICE_ORIGIN]) + say("A pumice rock from the fiery depths of some dungeon."); + else + say("A rock."); + } + + if (gflags[STORM_WEDDING_RING]) + { + if (gflags[KNOWS_RING_OWNER]) + say("The engagement ring belonging to Alyssand of Fawn."); + else if (gflags[HAS_CLUE_RING]) + say("A finely crafted silver ring, probably the lost engagement ring of a lass named Alyssand."); + else + say("A finely crafted ring, of silver, of a size to fit a small woman or a child."); + } + + if (gflags[STORM_FUR_CAP]) + { + if (gflags[KNOWS_FURCAP_OWNER] || gflags[GAVE_FURCAP_BACK]) + say("The elegant fur cap which Filbercio the MageLord purchased for his favorite, the sorceress Frigidazzi."); + else if (gflags[HAS_CLUE_FURCAP]) + say("An expensive fur cap, which the MageLord of Moonshade obtained for one of his many lovers."); + else + say("A ridiculous fur cap."); + } + + if (gflags[STORM_SLIPPERS]) + { + if (gflags[KNOWS_SLIPPERS_OWNER]) + say("The well-worn slippers belonging to Devra, the mistress of the Inn of the Sleeping Bull."); + else + say("Some very old and worn slippers, such as might be worn in the privacy of one's home."); + } + + if (gflags[STORM_BREAST_PLATE]) + { + if (gflags[KNOWS_BREAST_PLATE_OWNER]) + say("The ceremonial breastplate of the Priestess of Beauty, who is Kylista of Fawn. A very attractive lady, I should add."); + else + say("An enameled breastplate, suitable for ceremonial occasions."); + } + + if (gflags[STORM_BLUE_EGG]) + { + if (gflags[KNOWS_BLUE_EGG_OWNER]) + say("A penguin egg, such as may be found in the ice fields of the distant north."); + else + say("A strange blue egg."); + } + + if (gflags[STORM_GOBLIN_BRUSH]) + { + if (gflags[KNOWS_GOBLIN_BRUSH_ORIGIN]) + say("A grisly brush made from the bones of some poor victim of the Goblins. How foul!"); + else + say("A crude brush."); + } + + if (gflags[STORM_ICEWINE]) + { + if (gflags[KNOWS_ICEWINE_ORIGIN]) + say("A bottle of that excellent vintage of wine sold by the Rangers of Moonshade. Why, I should sample some now..."); + else + say("A bottle of ice wine -- whatever that is!"); + } + + if (gflags[STORM_FILARI]) + { + if (gflags[KNOWS_FILARI_OWNER]) + say("Jeweled coins from the City of Beauty, Fawn."); + else + say("Strange baubles -- silver disks with jewels in the center."); + } + + if (gflags[STORM_BEAR_SKULL]) + { + if (gflags[KNOWS_BEAR_SKULL_ORIGIN]) + say("The skull of a great mountain bear."); + else + say("A large skull, no doubt belonging to some large and dead animal."); + } + + if (gflags[STORM_SEVERED_HAND]) + { + if (gflags[KNOWS_SEVERED_HAND_OWNER]) + say("The severed hand from one of the Mad Mage's experiments. It is not dead, yet not living -- it doth not decay."); + else + say("A bloody hand, severed from its corpse. It shows no sign of decay, yet..."); + } + + if (gflags[STORM_MONITOR_SHIELD]) + { + if (gflags[KNOWS_MONITOR_SHIELD_ORIGIN]) + //I changed this one from the original: + //say("One of the common shields used by the Pikemen of Monitor."); + say("A sturdy shield belonging to Luther of Monitor."); + //Added a brand new one: + else if (gflags[HAS_CLUE_MONITOR_SIHELD]) + say("A shield from Monitor which possibly belongs to Luther."); + else + say("An inexpensive shield, sturdy and suitable for battle."); + } + + if (gflags[STORM_RUDDY_ROCK]) + { + if (gflags[KNOWS_STONEHEART_ORIGIN]) + say("The dangerous mineral known as Stoneheart, which is used to produce the illegal reagent Bloodspawn."); + else + say("A red hunk of stone."); + } + } + else + Scroll.original(); +} Index: time_tellers.uc =================================================================== RCS file: /cvsroot/exult/./exult/content/sifixes/src/items/time_tellers.uc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- time_tellers.uc 6 Jul 2005 20:14:15 -0000 1.3 +++ time_tellers.uc 27 Feb 2006 16:48:26 -0000 1.4 @@ -1,42 +1,61 @@ -DeskItem shape#(0x2A3) () -{ - if (event == DOUBLECLICK) - { - var framenum = UI_get_item_frame(item); - if (framenum == 21) - { - - var hour = UI_game_hour(); - var minute = UI_game_minute(); - if (minute <= 9) - minute = ("0" + minute); - - var bark = " " + hour + ":" + minute; - if (UI_in_gump_mode()) - UI_item_say(item, bark); - - else - { - bark = "@" + bark + "@"; - UI_item_say(0xFE9C, bark); - } - return; - } - } - DeskItem.original(); -} - -Sundial shape#(0x11C) () -{ - if (event == DOUBLECLICK) - { - var hour = UI_game_hour(); - if (hour == 12) - item_say("Noon"); - else if ((hour >= 6) && (hour <= 20)) - item_say(" " + UI_game_hour() + " o'clock"); - else - var bark = "@^<Avatar>, I believe the important part of the word sundial is `sun'.@"; - partyUtters(1, bark, bark, false); - } -} +/* + * + * Copyright (C) 2006 The Exult Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +DeskItem shape#(0x2A3) () +{ + if (event == DOUBLECLICK) + { + var framenum = UI_get_item_frame(item); + if (framenum == 21) + { + + var hour = UI_game_hour(); + var minute = UI_game_minute(); + if (minute <= 9) + minute = ("0" + minute); + + var bark = " " + hour + ":" + minute; + if (UI_in_gump_mode()) + UI_item_say(item, bark); + + else + { + bark = "@" + bark + "@"; + UI_item_say(0xFE9C, bark); + } + return; + } + } + DeskItem.original(); +} + +Sundial shape#(0x11C) () +{ + if (event == DOUBLECLICK) + { + var hour = UI_game_hour(); + if (hour == 12) + item_say("Noon"); + else if ((hour >= 6) && (hour <= 20)) + item_say(" " + UI_game_hour() + " o'clock"); + else + var bark = "@^<Avatar>, I believe the important part of the word sundial is `sun'.@"; + partyUtters(1, bark, bark, false); + } +} |