Classic Blades of Exile :

- Dying to a trap while attempting to open a container won't display the "get items in container" dialog with no alive character anymore.
- Casting the priest Light spell now updates the surrounding areas automatically (like Light and Long Light mage spells; moving or waiting isn't required anymore).
- Debug and Ghost mode are now turned off when loading a game.
- The shop scrolling bar is now properly cleaned up when loading a game while shopping.
- Items are now automatically combined when identified in a shop. To avoid any loss of information, the game now gives the identified item name in the message window (format : "Your item is identified. (full_item_name)"
- If an "active" character (i.e solo fighting) is incapacitated (AP reduced to 0 because of webs, sleep, paralysis, etc) the rest of the party (if present) is now activated the next turn.
- Entering a space containing the special node number 50 won't "force move" the party anymore.
- Added a compatibility option (mainly testing purpose) : "specials are triggered when on boat".
- The restart option of the death menu now works as intended.
- Finally renamed the "Heal All" monster priest spell from "Full Heal" to "Revive Self". That should prevent any further confusion.
- Using items now always updates the ap counter.
- For the sake of consistency : changed labels "Power Potion" to "Energy Potion" potions in the Alchemy menu.
- Redrawing the screen is now correctly handled by specials in all mode (e.g a special that changes a terrain will correctly redraw the screen, even if it was called by looking or moving).

Scenario Editor :

- Redid the custom pictures drawing implementation : custom pictures should now always appears and redraw (terrain, animated terrains, monsters, items, preset items, ...).
- It is now possible to directly give the "Drain missiles" ability to bows and crossbows (use the "Weapon Ability" menu).

Chokboyz

git-svn-id: http://openexile.googlecode.com/svn/trunk@160 4ebdad44-0ea0-11de-aab3-ff745001d230
This commit is contained in:
Chokboyz
2011-01-09 19:50:46 +00:00
parent 1fb77013b4
commit 1fb69d8754
23 changed files with 248 additions and 210 deletions

View File

@@ -1168,7 +1168,7 @@ STYLE WS_POPUP | WS_DLGFRAME
{
LTEXT "1_63", 1, 435, 295, 61, 20
LTEXT "5_716", 2, 6, 6, 36, 36
LTEXT "Classic Blades of Exile build_26.11.2010 | Copyright 1997, Spiderweb Software, Inc., All rights reserved.||Blades of Exile is distributed for free under GNU General Public License version 2.", 3, 50, 6, 420, 33
LTEXT "Classic Blades of Exile build 09.01.2011 | Copyright 1997, Spiderweb Software, Inc., All rights reserved.||Blades of Exile is distributed for free under GNU General Public License version 2.", 3, 50, 6, 420, 33
LTEXT "CONTRIBUTORS : Ormus, Ishad Nha, Celtic Minstrel, Niemand and all involved in the BoE community.", 4, 50, 227, 424, 33
LTEXT "Comments? Questions? Bugs? Post them at the Blades section of the Irony Central Board: www.ironycentral.com/forum/", 5, 50, 271, 354, 32
LTEXT "Blades of Exile was brought to you by Spiderweb Software - | _Where our aberrations become your reality._ |_Blades of Exile_ and Spiderweb Software are trademarks of Spiderweb Software.", 7, 50, 154, 410, 51
@@ -1626,6 +1626,7 @@ STYLE WS_POPUP | WS_DLGFRAME
LTEXT "2_0", 60, 53, 480,17,18
LTEXT "*Ask About text box in talking mode",61,72,476,340,16
}
1100 DIALOG 10, 10, 450, 451
STYLE WS_POPUP | WS_DLGFRAME
{
@@ -1648,4 +1649,6 @@ STYLE WS_POPUP | WS_DLGFRAME
LTEXT "2_0", 17, 49, 166, 17, 18
LTEXT "Special Timers are checked when resting outdoor/in inn", 18, 70 ,182 ,182 ,17
LTEXT "2_0", 19, 49, 186, 17, 18
LTEXT "Specials are triggered when in a boat", 20, 70 ,202 ,182 ,17
LTEXT "2_0", 21, 49, 206, 17, 18
}

View File

@@ -811,8 +811,8 @@ STRINGTABLE
3063, "Your health is a measure of how much punishment you can take before dying - the more the better. Whenever you get hit, you lose some health. Taking damage when your health is down to 0 will kill you."
3064, "Your spell points are what you expend to cast spells. Each spell drains away some of your spell points. Time and rest restore them. When creating a character, you get 3 bonus spell points for every level of Mage and Priest Spells skill you buy."
3065, "Some doors can't be opened no matter what you try. For example, portcullises can almost never be opened by picking locks or bashing."
3110, "This is a temporary menu with some legacy compatibility options. Its main purpose is to test several changes introduces with code revisions.|Compatibilities options can be set anytime, anywhere and reverted back the same."
3111, "Should you find a legacy compatibility breaking, please report it to the Irony Central board."
/*3070, "This is a temporary menu with some legacy compatibility options. Its main purpose is to test several changes introduces with code revisions.|Compatibilities options can be set anytime, anywhere and reverted back the same."
3071, "Should you find a legacy compatibility breaking, please report it to the Spiderweb Software board."*/
3301, "Can cast everywhere."
3302, "Combat only."
3303, "Town only."
@@ -1102,7 +1102,7 @@ STRINGTABLE
7520, "Strong Healing Potion | Min. Skill - 12 |Need graymold and comfrey root. Provides excellent healing."
7521, "Killer Poison | Min. Skill - 12 |Need mandrake root. The strongest poison."
7522, "Resurrection Balm | Min. Skill - 9 |Need ember flowers. Necessary to cast Raise Dead or Resurrection."
7523, "Medium Power Potion | Min. Skill - 14 |Need mandrake root and asptongue mold. Restores a fair amount of spell points."
7523, "Medium Energy Potion | Min. Skill - 14 |Need mandrake root and asptongue mold. Restores a fair amount of spell points."
7524, "Knowledge Brew | Min. Skill - 19 |This most powerful of potions requires Mandrake and Ember Flowers for its creation."
7525, "Strength Potion | Min. Skill - 10 |This brew is a great aid in combat. Making it requires ember flowers and glowing nettle."
7526, "Bliss | Min. Skill - 16 |Combining the best elements of healing and strength potions, bliss potions contain asptongue mold and graymold."
@@ -1176,7 +1176,7 @@ STRINGTABLE
11479, "Wall of Blades"
11480, "Word of Recall"
11481, "Major Cleansing"
11500, "Weak Curing"
11500, "Weak Curing"
11501, "Weak Healing"
11502, "Weak Poison"
11503, "Weak Speed"
@@ -1185,15 +1185,15 @@ STRINGTABLE
11506, "Strong Curing"
11507, "Medium Speed"
11508, "Graymold Salve"
11509, "Weak Power"
11509, "Weak Energy"
11510, "Potion of Clarity"
11511, "Strong Poison"
11512, "Strong Healing"
11513, "Killer Poison"
11514, "Resurrection Balm"
11515, "Medium Power"
11515, "Medium Energy"
11516, "Knowledge Brew"
11517, "Strong Strength"
11518, "Bliss"
11519, "Strong Power"
11519, "Strong Energy"
}

View File

@@ -176,7 +176,7 @@ Boolean handle_action(POINT the_point, WPARAM wparam, LPARAM lparam )
short find_direction_from,ter_looked_at,button_hit = 12;
short store_sp[6];
char str[60];
char str[60], id_name[256];
POINT point_in_area;
Boolean right_button = false;
Boolean ctrl_key = false;
@@ -1039,6 +1039,7 @@ Boolean handle_action(POINT the_point, WPARAM wparam, LPARAM lparam )
if ((overall_mode != MODE_TOWN_TARGET) && (overall_mode != MODE_SPELL_TARGET))
did_something = true;
take_ap(3);
need_redraw = true;
break;
case 2: // give
adven[stat_window].giveThing(item_hit);
@@ -1071,9 +1072,13 @@ Boolean handle_action(POINT the_point, WPARAM wparam, LPARAM lparam )
ASB("Identify: You don't have the gold.");
else {
play_sound(68);
ASB("Your item is identified.");
sprintf(id_name, "Your item is identified. (%s)",adven[stat_window].items[item_hit].full_name);
ASB(id_name);
/*ASB("Your item is identified.");
ASB(adven[stat_window].items[item_hit].full_name);*/
adven[stat_window].items[item_hit].item_properties =
adven[stat_window].items[item_hit].item_properties | 1;
adven[stat_window].combineThings();
}
break;
case 3: case 4: case 5: // various selling
@@ -2416,40 +2421,51 @@ void switch_pc(short which)
void handle_death()
{
short choice;
short choice, i;
bool done = false;
in_startup_mode = true;
while (in_startup_mode == true)
while (done == false)
{
// Use death (or leave Exile) dialog
in_startup_mode = false;
// Use death (or leave Exile) dialog
choice = FCD(1069,0); //// FCD hates it when it gets called in startup mode
// and startup graphics aren't loaded.
in_startup_mode = true;
done = true;
if (choice == 1) {
in_startup_mode = false;
if (choice == 1) {//restore
load_file();
if (party_toast() == false) {
if (in_startup_mode == false)
post_load();
else return;
}
else in_startup_mode = true;
else
done = false;
}
if (choice == 2)
start_new_game();
if (choice == 2){//restart
if (choice == 3) {
in_startup_mode = false;
All_Done = true;
i = FCD(1091,0);//"are you sure ?" dialog
if(i == 1)//cancel button hit
done = false;
else{
for (i = 0; i < 6; i++)
adven[i].main_status = MAIN_STATUS_ABSENT;
party_in_memory = false;
reload_startup();
in_startup_mode = true;
draw_startup(0);
start_new_game();
draw_startup(0);
}
}
if (choice == 3) {//quit
done = true;
All_Done = true;
}
}
}
@@ -2537,7 +2553,7 @@ Boolean outd_move_party(location destination,Boolean forced)
keep_going = check_special_terrain(destination,0,0,&spec_num,&check_f);
if (check_f == true) forced = true;
if (in_scen_debug && ghost_mode) forced = true;
if (spec_num == 50) forced = true;
/*if (spec_num == 50) forced = true;*/ //if it's the number 50 special node, then force movement...
// If not blocked and not put in town by a special, process move
if ((keep_going == true) && (overall_mode == MODE_OUTDOORS)) {
@@ -2595,7 +2611,7 @@ Boolean outd_move_party(location destination,Boolean forced)
return false;
else if ((outd_is_blocked(real_dest) == false)
&& (scenario.ter_types[ter].boat_over == true)
&& (scenario.ter_types[ter].special != TER_SPEC_TOWN_ENTRANCE) && ter != 75 && ter!=76) {//75-76=> lava is hardcoded... to change
&& (scenario.ter_types[ter].special != TER_SPEC_TOWN_ENTRANCE) && (ter != 75) && (ter != 76)) {//75-76=> lava is hardcoded... to change
if ((fancy_choice_dialog(1086,0)) == 1)
forced = true;
else {
@@ -2755,9 +2771,12 @@ Boolean town_move_party(location destination,short forced)
if (in_scen_debug && ghost_mode) forced = true;
if (monst_there(destination) > T_M) keep_going = check_special_terrain(destination,1,0,&spec_num,&check_f);
if (check_f == true) forced = true;
if (spec_num == 50) forced = true;
if (monst_there(destination) > T_M)
keep_going = check_special_terrain(destination,1,0,&spec_num,&check_f);
if (check_f == true)
forced = true;
/*if (spec_num == 50) forced = true;*/ //if it's the number 50 special node, then force movement...
ter = t_d.terrain[destination.x][destination.y];
if (keep_going == true) {
@@ -2823,7 +2842,7 @@ Boolean town_move_party(location destination,short forced)
return true;
}
else if ((is_blocked(destination) == false) || (forced == 1)) {
else if ((is_blocked(destination) == false) || (forced == true)) {
if (party.in_horse >= 0) {
if ((scenario.ter_types[ter].special >= TER_SPEC_DOES_FIRE_DAMAGE) && (scenario.ter_types[ter].special <= TER_SPEC_DOES_MAGIC_DAMAGE)) {
ASB("Your horses quite sensibly refuse.");

View File

@@ -1289,7 +1289,8 @@ void fire_missile(location target)
if (adven[missile_firer].items[ammo_inv_slot].variety != ITEM_TYPE_MISSILE_NO_AMMO) {//in case someone has been killed and current_pc is not the firer anymore
if (adven[missile_firer].items[ammo_inv_slot].ability != ITEM_MISSILE_RETURNING)
adven[missile_firer].items[ammo_inv_slot].charges--;
else adven[missile_firer].items[ammo_inv_slot].charges = 1;
else
adven[missile_firer].items[ammo_inv_slot].charges = 1;
if ((adven[missile_firer].hasAbilEquip(ITEM_DRAIN_MISSILES) < 24) && (adven[missile_firer].items[ammo_inv_slot].ability != ITEM_MISSILE_RETURNING))
adven[missile_firer].items[ammo_inv_slot].charges--;
if (adven[missile_firer].items[ammo_inv_slot].charges <= 0)
@@ -1317,6 +1318,11 @@ Boolean combat_next_step()
while (pick_next_pc() == true) {
combat_run_monst();
set_pc_moves();
if((combat_active_pc < 6) && (pc_moves[combat_active_pc] == 0)){
combat_active_pc = 6;
ASB(">The active character is unable to act!");
ASB(">The whole party is now active.");
}
to_return = true;
// Safety valve
if (party_toast() == true)
@@ -1336,9 +1342,9 @@ Boolean combat_next_step()
adjust_spell_menus();
if ((combat_active_pc == 6) && (current_pc != store_pc)) {
sprintf((char *)create_line, "Active: %s (#%d, %d ap.) ",
sprintf(create_line, "Active: %s (#%d, %d ap.) ",
adven[current_pc].name,current_pc + 1,pc_moves[current_pc]);
add_string_to_buf((char *)create_line);
add_string_to_buf(create_line);
print_buf();
}
if ((current_pc != store_pc) || (to_return == true)) {
@@ -2968,7 +2974,7 @@ Boolean monst_cast_priest(creature_data_type *caster,short targ)
//emergency spells level 5 (summon host, flamestrike, major heal)
{SPELL_MONST_PRIEST_NO_SPELL,SPELL_MONST_PRIEST_SUMMON_HOST,SPELL_MONST_PRIEST_FLAMESTRIKE,SPELL_MONST_PRIEST_MAJOR_HEAL},
//emergency spells level 6 (summon host, flamestrike, full heal)
{SPELL_MONST_PRIEST_NO_SPELL,SPELL_MONST_PRIEST_SUMMON_HOST,SPELL_MONST_PRIEST_FLAMESTRIKE,SPELL_MONST_PRIEST_HEAL_ALL},
{SPELL_MONST_PRIEST_NO_SPELL,SPELL_MONST_PRIEST_SUMMON_HOST,SPELL_MONST_PRIEST_FLAMESTRIKE,SPELL_MONST_PRIEST_REVIVE_SELF},
//emergency spells level 7 (avatar, divine thud, revive all)
{SPELL_MONST_PRIEST_AVATAR,SPELL_MONST_PRIEST_AVATAR,SPELL_MONST_PRIEST_DIVINE_THUD,SPELL_MONST_PRIEST_REVIVE_ALL}};
@@ -3023,7 +3029,7 @@ Boolean monst_cast_priest(creature_data_type *caster,short targ)
// snuff heals if unwounded
if ((caster->m_d.health == caster->m_d.m_health) &&
((spell == SPELL_MONST_PRIEST_MAJOR_HEAL) || (spell == SPELL_MONST_PRIEST_HEAL_ALL) || (spell = SPELL_MONST_PRIEST_LIGHT_HEAL) || (spell = SPELL_MONST_PRIEST_HEAL)))
((spell == SPELL_MONST_PRIEST_MAJOR_HEAL) || (spell == SPELL_MONST_PRIEST_REVIVE_SELF) || (spell = SPELL_MONST_PRIEST_LIGHT_HEAL) || (spell = SPELL_MONST_PRIEST_HEAL)))
spell--;
l = caster->m_loc;
@@ -3155,20 +3161,20 @@ Boolean monst_cast_priest(creature_data_type *caster,short targ)
}
break;
case SPELL_MONST_PRIEST_LIGHT_HEAL: case SPELL_MONST_PRIEST_HEAL: case SPELL_MONST_PRIEST_MAJOR_HEAL: case SPELL_MONST_PRIEST_HEAL_ALL: // heals
case SPELL_MONST_PRIEST_LIGHT_HEAL: case SPELL_MONST_PRIEST_HEAL: case SPELL_MONST_PRIEST_MAJOR_HEAL: case SPELL_MONST_PRIEST_REVIVE_SELF: // heals
play_sound(24);
switch(spell) {
case SPELL_MONST_PRIEST_LIGHT_HEAL: r1 = get_ran(2,1,4) + 2; break;
case SPELL_MONST_PRIEST_HEAL: r1 = get_ran(3,1,6); break;
case SPELL_MONST_PRIEST_MAJOR_HEAL: r1 = get_ran(5,1,6) + 3; break;
case SPELL_MONST_PRIEST_HEAL_ALL: r1 = 50; break;
case SPELL_MONST_PRIEST_REVIVE_SELF: r1 = 50; break;
}
caster->m_d.health = min(caster->m_d.health + r1, caster->m_d.m_health);
break;
case SPELL_MONST_PRIEST_BLESS_ALL: case SPELL_MONST_PRIEST_REVIVE_ALL:// bless all,revive all
play_sound(24);
r1 = get_ran(2,1,4);
r2 = get_ran(3,1,6);
r2 = get_ran(3,1,6);// <= shouldn't it be the "revive all" roll ?
for (i = 0; i < T_M; i++)
if ((monst_near(i,caster->m_loc,8,0)) &&
(caster->attitude == c_town.monst.dudes[i].attitude)) {
@@ -3176,7 +3182,7 @@ Boolean monst_cast_priest(creature_data_type *caster,short targ)
if (spell == SPELL_MONST_PRIEST_BLESS_ALL)
affected->m_d.status[STATUS_BLESS_CURSE] = min(8,affected->m_d.status[STATUS_BLESS_CURSE] + r1);
if (spell == SPELL_MONST_PRIEST_REVIVE_ALL)
affected->m_d.health += r1;
affected->m_d.health += r1; //<= here
}
play_sound(4);
break;
@@ -4060,7 +4066,7 @@ Boolean combat_cast_priest_spell()
if (target < 6) {
store_sound = 4;
adven[current_pc].cur_sp -= s_cost[1][spell_num];
adven[target].status[STATUS_BLESS_CURSE ] += (spell_num == SPELL_PRIEST_MINOR_BLESS) ? 2 :
adven[target].status[STATUS_BLESS_CURSE] += (spell_num == SPELL_PRIEST_MINOR_BLESS) ? 2 :
max(2,(adven[current_pc].level * 3) / 4 + 1 + bonus);
sprintf (c_line, " %s blessed. ",
adven[target].name);
@@ -4073,7 +4079,7 @@ Boolean combat_cast_priest_spell()
adven[current_pc].cur_sp -= s_cost[1][spell_num];
for (i = 0; i < 6; i++)
if (adven[i].isAlive()) {
adven[i].status[STATUS_BLESS_CURSE ] += adven[current_pc].level / 3;
adven[i].status[STATUS_BLESS_CURSE] += adven[current_pc].level / 3;
add_missile(pc_pos[i],8,0,0,0);
}
sprintf (c_line, " Party blessed. ");

View File

@@ -84,10 +84,10 @@ void end_shop_mode()
ShowScrollBar(shop_sbar,SB_CTL,false);
if (store_pre_shop_mode == 20) {
sprintf((char *)old_str1,"You conclude your business.");
sprintf((char *)old_str2,"");
sprintf((char *)one_back1,"You conclude your business.");
sprintf((char *)one_back2,"");
sprintf(old_str1,"You conclude your business.");
sprintf(old_str2,"");
sprintf(one_back1,"You conclude your business.");
sprintf(one_back2,"");
strnum1 = strnum2 = oldstrnum1 = oldstrnum2 = 0;
place_talk_str((char *)old_str1,"",0,dummy_rect);
@@ -1210,9 +1210,10 @@ Boolean compatibility_event_filter (short item_hit)
break;
case 7: case 9: case 11: case 13: case 15: case 17: case 19:
case 7: case 9: case 11: case 13: case 15: case 17: case 19: case 21:
cd_set_led(1100,item_hit,1 - cd_get_led(1100,item_hit));
break;
break;
}
if (done_yet== true) {
@@ -1224,6 +1225,7 @@ Boolean compatibility_event_filter (short item_hit)
party.stuff_done[SDF_COMPATIBILITY_SPECIALS_INTERRUPT_REST]=cd_get_led(1100,15);
party.stuff_done[SDF_COMPATIBILITY_ANYTIME_STAIRWAY_NODES]=cd_get_led(1100,17);
party.stuff_done[SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING]=cd_get_led(1100,19);
party.stuff_done[SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT]=cd_get_led(1100,21);
}
build_data_file(1);
}
@@ -1245,16 +1247,18 @@ void pick_compatibility()
cd_set_led(1100,15,(party.stuff_done[SDF_COMPATIBILITY_SPECIALS_INTERRUPT_REST] != 0) ? 1 : 0);// party.stuff_done[309][4] special_interrupt
cd_set_led(1100,17,(party.stuff_done[SDF_COMPATIBILITY_ANYTIME_STAIRWAY_NODES] != 0) ? 1 : 0);// party.stuff_done[309][5] stairway_everywhere
cd_set_led(1100,19,(party.stuff_done[SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING] != 0) ? 1 : 0);// party.stuff_done[309][6] resting_checks_timers
cd_set_led(1100,21,(party.stuff_done[SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT] != 0) ? 1 : 0);// party.stuff_done[309][7] trigger_special_on_boat
if (party.help_received[110] == 0) {
/*if (party.help_received[70] == 0) {
cd_initial_draw(1100);
give_help(110,111,1100);
}
give_help(70,71,1100);
}*/
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(1100,0);
adjust_window_mode();
//adjust_window_mode();
}
void put_party_stats()

View File

@@ -597,6 +597,9 @@ void load_file()
party_in_memory = true;
if(overall_mode == MODE_SHOPPING)//if loading while shopping, clean the shop items scroll bar
ShowScrollBar(shop_sbar,SB_CTL,false);
// now if not in scen, this is it.
if (in_scen == false)
{
@@ -628,6 +631,10 @@ void load_file()
erase_out_specials();
belt_present = false;
//turn off the debug mode...
in_scen_debug = false;
ghost_mode = false;
//...in case it was on
if (town_restore == false) {
center = party.p_loc;
@@ -1743,6 +1750,8 @@ void get_reg_data()
party.stuff_done[SDF_COMPATIBILITY_ANYTIME_STAIRWAY_NODES] = atoi(buffer);
GetPrivateProfileString(section, "resting_checks_timers", "0", buffer, BUFFER_LEN, iniFile);
party.stuff_done[SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING] = atoi(buffer);
GetPrivateProfileString(section, "trigger_special_on_boat", "0", buffer, BUFFER_LEN, iniFile);
party.stuff_done[SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT] = atoi(buffer);
}
@@ -1769,6 +1778,7 @@ void build_data_file(short which) // 1 - compatibility ; 2 - preferences
WritePrivateProfileString(section, "special_interrupt", (party.stuff_done[SDF_COMPATIBILITY_SPECIALS_INTERRUPT_REST] == 0)? "0" : "1", iniFile);
WritePrivateProfileString(section, "stairway_everywhere", (party.stuff_done[SDF_COMPATIBILITY_ANYTIME_STAIRWAY_NODES] == 0)? "0" : "1", iniFile);
WritePrivateProfileString(section, "resting_checks_timers", (party.stuff_done[SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING] == 0)? "0" : "1", iniFile);
WritePrivateProfileString(section, "trigger_special_on_boat", (party.stuff_done[SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT] == 0)? "0" : "1", iniFile);
}
}

View File

@@ -631,7 +631,7 @@ void display_alchemy()
"Knowledge Brew (19)",
"Strong Strength (10)",
"Bliss (16)",
"Strong Power (20)"
"Strong Energy Ptn. (20)"
};
SetCursor(sword_curs);
@@ -1203,7 +1203,7 @@ void display_strings_event_filter (short item_hit)
}
}
// str_label_1 & str_label_2 uysed for saving button for journal
// str_label_1 & str_label_2 used for saving button for journal
// 1000 + x scen 2000 + x out 3000 + x town
void display_strings(char *text1, char *text2,short str_label_1,short str_label_2,short str_label_1b,
short str_label_2b,

View File

@@ -349,24 +349,24 @@ void put_item_graphics()
if (item_array[i + first_item_shown] != 200) { // display an item in window
item = t_i.items[item_array[i + first_item_shown]];
sprintf ((char *) message, "%s",
sprintf (message, "%s",
(item.isIdent()) ? (char *) item.full_name : (char *) item.name);
csit(987,21 + i * 4,(char *) message);
if (item.graphic_num >= 150)//custom item graphic?
csp(987,20 + i * 4,3000 + 2000 + item.graphic_num - 150);
else csp(987,20 + i * 4,4800 + item.graphic_num);////
get_item_interesting_string(item,(char *) message);
csit(987,22 + i * 4,(char *) message);
get_item_interesting_string(item, message);
csit(987,22 + i * 4, message);
storage = item_weight(item);
sprintf ((char *) message, "Weight: %d",storage);
csit(987,53 + i,(char *) message);
sprintf (message, "Weight: %d",storage);
csit(987,53 + i, message);
}
else { // erase the spot
sprintf ((char *) message, "");
csit(987,21 + i * 4,(char *) message);
csit(987,22 + i * 4,(char *) message);
csit(987,53 + i,(char *) message);
sprintf (message, "");
csit(987,21 + i * 4, message);
csit(987,22 + i * 4, message);
csit(987,53 + i, message);
}
}

View File

@@ -176,7 +176,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int nCmd
RegisterClass(&wndclass2);
mainPtr = CreateWindow (szAppName, "Classic Blades of Exile build_26.11.2010",
mainPtr = CreateWindow (szAppName, "Classic Blades of Exile build_09.01.2011",
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
0,
0,

View File

@@ -1233,7 +1233,8 @@ void do_priest_spell(short pc_num,short spell_num)
case SPELL_PRIEST_LIGHT:
adven[pc_num].cur_sp -= spell_cost[1][spell_num];
party.light_level += 210;
//party.light_level += 210;
increase_light(210);
break;
case SPELL_PRIEST_SUMMON_SPIRIT:
@@ -1660,7 +1661,7 @@ void cast_town_spell(location where)
switch (scenario.ter_types[ter].special) { ////
case TER_SPEC_UNLOCKABLE_TERRAIN: case TER_SPEC_UNLOCKABLE_BASHABLE:
r1 = get_ran(1,0,100) - 5 * adven[who_cast].statAdj(SKILL_INTELLIGENCE) + 5 * c_town.difficulty;
r1 += scenario.ter_types[ter].flag2 * 7;
r1 += scenario.ter_types[ter].flag2 * 7; //unlock_adjust (door resistance)
if (scenario.ter_types[ter].flag2 == 10)
r1 = 10000;
if (r1 < (135 - combat_percent[min(19,adven[who_cast].level)])) {
@@ -2343,8 +2344,10 @@ void do_alchemy()
short pc_num;
item_record_type store_i = {7,0, 0,0,0,1,0,0, 50,0,0,0,0,0, 0, 8,0, location(),"Potion","Potion",0,5,0,0};
short potion_abils[20] = {72,87,70,73,70, 87,72,73,77,88,
79,70,87,70,160, 88,86,71,84,88};
short potion_abils[20] = {ITEM_AFFECT_POISON,ITEM_AFFECT_HEALTH,ITEM_POISON_WEAPON,ITEM_HASTE_SLOW,ITEM_POISON_WEAPON,
ITEM_AFFECT_HEALTH,ITEM_AFFECT_POISON,ITEM_HASTE_SLOW,ITEM_AFFECT_DISEASE,ITEM_AFFECT_SPELL_POINTS,
ITEM_AFFECT_DUMBFOUND,ITEM_POISON_WEAPON,ITEM_AFFECT_HEALTH,ITEM_POISON_WEAPON,ITEM_RESSURECTION_BALM,
ITEM_AFFECT_SPELL_POINTS,ITEM_AFFECT_SKILL_POINTS,ITEM_BLESS_CURSE,ITEM_BLISS,ITEM_AFFECT_SPELL_POINTS};
short potion_strs[20] = {2,2,2,2,4, 5,8,5,4,2,
8,6,8,8,0, 5,2,8,5,8};
short potion_val[20] = {40,60,15,50,50, 180,200,100,150,100,

View File

@@ -82,6 +82,8 @@ Boolean handle_wandering_specials (short mode)
if ((mode == 2) && (store_wandering_special.spec_on_flee >= 0)) {// After fleeing like a buncha girly men
run_special(SPEC_FLEE_ENCOUNTER,1,store_wandering_special.spec_on_flee,null_loc,&s1,&s2,&s3);
}
if(s3 > 0)
initiate_redraw();
return true;
}
@@ -169,8 +171,9 @@ Boolean check_special_terrain(location where_check,short mode,short which_pc,sho
*forced = true;
}
*spec_num = c_town.town.spec_id[i];
if ((is_blocked(where_check) == false) || (ter_special == TER_SPEC_CHANGE_WHEN_STEP_ON)
|| (ter_special == TER_SPEC_CALL_LOCAL_SPECIAL) || (ter_special == TER_SPEC_CALL_SCENARIO_SPECIAL)) {
if ((is_blocked(where_check) == false) || (ter_special == TER_SPEC_CHANGE_WHEN_STEP_ON) //is_blocked doesn't check if aboard a boat...
|| (ter_special == TER_SPEC_CALL_LOCAL_SPECIAL) || (ter_special == TER_SPEC_CALL_SCENARIO_SPECIAL)
|| ((PSD[SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT] == true) && (party.in_boat >= 0) && (scenario.ter_types[ter].boat_over == true))) { //...so, check if in boat and terrain allows to boat over
give_help(54,0,0);
run_special(mode,2,c_town.town.spec_id[i],where_check,&s1,&s2,&s3);
if (s1 > 0)
@@ -351,6 +354,9 @@ Boolean check_special_terrain(location where_check,short mode,short which_pc,sho
if (is_combat())
update_explored(pc_pos[current_pc]);
if (s3 > 0)
initiate_redraw();
return can_enter;
}
@@ -986,8 +992,11 @@ Boolean adj_town_look(location where)
for (i = 0; i < 50; i++)
if (same_point(where,c_town.town.special_locs[i]) == true) {
run_special(SPEC_TOWN_LOOK,2,c_town.town.spec_id[i],where,&s1,&s2,&s3);
if (s1 > 0) can_open = false;
if (s1 > 0)
can_open = false;
got_special = true;
if (s3 > 0)
initiate_redraw();
}
put_item_screen(stat_window,0);
}
@@ -2041,7 +2050,7 @@ void oneshot_spec(short which_mode,special_node_type cur_node,short cur_spec_typ
else j = adven[tmp].runTrap(spec.ex1a,spec.ex1b,spec.ex2a);
}
if (j == 0)
if (j == 0 || (party_toast() == true))//maybe party has been killed by the traps...
{
*a = 1;
set_sd = false;

View File

@@ -53,7 +53,8 @@
#define SDF_COMPATIBILITY_FULL_TRIMS 309][3
#define SDF_COMPATIBILITY_SPECIALS_INTERRUPT_REST 309][4
#define SDF_COMPATIBILITY_ANYTIME_STAIRWAY_NODES 309][5
#define SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING 309][6
#define SDF_COMPATIBILITY_CHECK_TIMERS_WHILE_RESTING 309][6
#define SDF_COMPATIBILITY_TRIGGER_SPECIALS_ON_BOAT 309][7
#define INVALID_TOWN 200
@@ -1082,7 +1083,7 @@ enum eMonstersPriestSpells {
SPELL_MONST_PRIEST_MAJOR_HEAL = 17,
SPELL_MONST_PRIEST_FLAMESTRIKE = 18,
SPELL_MONST_PRIEST_SUMMON_HOST = 19,
SPELL_MONST_PRIEST_HEAL_ALL = 20,// !!! this isn't a mass spell !!! it's the most reliable self-heal spell a monster can cast (heal 50 health each cast)
SPELL_MONST_PRIEST_REVIVE_SELF = 20,// renamed from heal all, to avoid confusion (this isn't a mass spell !)
SPELL_MONST_PRIEST_UNHOLY_RAVAGING = 21,
SPELL_MONST_PRIEST_SUMMON_GUARDIAN = 22,
SPELL_MONST_PRIEST_PESTILENCE = 23,

View File

@@ -69,16 +69,16 @@ void pc_record_type::kill(short type)
play_sound(21);
if(type == 4){
play_sound(43);
sprintf ((char *) create_line, " %s is turned to stone. ",(char *) name);
add_string_to_buf((char *) create_line);
sprintf (create_line, " %s is turned to stone. ",(char *) name);
add_string_to_buf(create_line);
}
main_status = type;
pc_moves[which_pc] = 0;
}
else {
if (type == 4) {
sprintf ((char *) create_line, " %s is immune to petrification. ",(char *) name);
add_string_to_buf((char*) create_line); //inform of what has happened
sprintf (create_line, " %s is immune to petrification. ",(char *) name);
add_string_to_buf(create_line); //inform of what has happened
}
else{
add_string_to_buf(" Life saved! ");
@@ -499,8 +499,8 @@ void pc_record_type::acid(short how_much)
}
status[STATUS_ACID] += how_much;
sprintf ((char *) c_line, " %s covered with acid!",(char *) name);
add_string_to_buf((char *) c_line);
sprintf (c_line, " %s covered with acid!",(char *) name);
add_string_to_buf(c_line);
one_sound(42);
put_pc_screen();

View File

@@ -784,7 +784,7 @@ char *alch_names[] = {"Weak Curing Potion (1)","Weak Healing Potion (1)","Weak P
"Graymold Salve (7)","Weak Energy Potion (9)",
"Potion of Clarity (9)","Strong Poison (10)","Strong Heal Potion (12)","Killer Poison (12)",
"Resurrection Balm (9)","Medium Energy Ptn. (14)","Knowledge Brew (19)" ,
"Strong Strength (10)","Bliss (16)","Strong Power (20)"
"Strong Strength (10)","Bliss (16)","Strong Energy Ptn. (20)"
};
char *alch_names_short[] = {"Weak Curing Potion","Weak Healing Potion","Weak Poison",
"Weak Speed Potion","Medium Poison",
@@ -792,7 +792,7 @@ char *alch_names_short[] = {"Weak Curing Potion","Weak Healing Potion","Weak Poi
"Graymold Salve","Weak Energy Potion",
"Potion of Clarity","Strong Poison","Strong Heal Potion","Killer Poison",
"Resurrection Bal","Medium Energy Ptn.","Knowledge Brew",
"Strong Strength","Bliss","Strong Power"
"Strong Strength","Bliss","Strong Energy Ptn."
};
short spell_w_cast[2][62] = {{0,1,1,1,1,1,3,4,1,2, 1,1,1,1,1,1,4,1,4,1, 2,1,1,0,1,1,4,1,1,0,
1,1,1,2,4,1,1,1, 2,1,1,2,4,4,1,1, 1,1,1,1,4,4,1,5, 1,4,1,4,4,4,4,1},
@@ -875,7 +875,7 @@ char *m_mage_sp[] = {"Spark","Minor Haste","Strength","Flame Cloud","Flame",
char *m_priest_sp[] = {"Minor Bless","Light Heal","Wrack","Stumble","Bless",
"Curse","Wound","Summon Spirit","Disease","Heal",
"Holy Scourge","Smite","Curse All","Sticks to Snakes","Martyr's Shield",
"Bless All","Major Heal","Flamestrike","Summon Host","Full Heal",
"Bless All","Major Heal","Flamestrike","Summon Host","Revive Self",
"Unholy Ravaging","Summon Guardian","Pestilence","Revive All","Avatar",
"Divine Thud"};
// extra devices for maps