Profile for Garrison

Error message

Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /var/www/pied-piper.ermarian.net/includes/common.inc).

Recent posts

Pages

AuthorRecent posts
unhandled exception in Blades of Avernum
Agent
Member # 2820
Profile #3
There are several things that cause horrible errors like this. Outrageously out of range numbers and giving the wrong kinds of items to certain monsters don't work well with the game. There is a small possibility that the file is corrupted, although it is probably something you did in the town. Check to see if the scenario works fine without Town 4, and then add it back in.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
brass key,golem in library:help in Blades of Avernum
Agent
Member # 2820
Profile #8
Why would it be dead?

Still don't get how to defeat that thing. If I am lucky it won't bring me down to 0 on the first hit, but it almost never misses and has an awful lot of chances to kill.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
A way to reuse flags in the same scenerio in Blades of Avernum Editor
Agent
Member # 2820
Profile #2
So, what you are saying is that you want to document the previous value of a flag when you enter a town in which you want to reuse certain flags, and then it is reset when exited. For all practical purposes, the flag's scope will only be inside the town. You should remember that there is a limit to how many variables you can declare in a single script, but this could be useful for those who like to have multipurposes for flags.

Warn players about forcefully leaving the town with the editor.

EDIT: Now for my personal opinion: I do not think that this is a good idea. You have up to 30 flags for each town number + outdoor sections. Mind you that you can have 100 outdoor sections, and even the largest scenarios didn't have that many, though the flags will still be there.

I like running the extra flags in town over to the flags for outdoor sections that don't exist.

[ Tuesday, July 27, 2004 20:16: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
A way to reuse flags in the same scenerio in Blades of Avernum
Agent
Member # 2820
Profile #2
So, what you are saying is that you want to document the previous value of a flag when you enter a town in which you want to reuse certain flags, and then it is reset when exited. For all practical purposes, the flag's scope will only be inside the town. You should remember that there is a limit to how many variables you can declare in a single script, but this could be useful for those who like to have multipurposes for flags.

Warn players about forcefully leaving the town with the editor.

EDIT: Now for my personal opinion: I do not think that this is a good idea. You have up to 30 flags for each town number + outdoor sections. Mind you that you can have 100 outdoor sections, and even the largest scenarios didn't have that many, though the flags will still be there.

I like running the extra flags in town over to the flags for outdoor sections that don't exist.

[ Tuesday, July 27, 2004 20:16: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Erika's old quarters.... in Blades of Avernum
Agent
Member # 2820
Profile #31
Well, you can be sure that Avernum 2 takes place just a few years after Avernum 1, and I think it was mentioned that the assassinated Hawthorne was actually Hawthorne III.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
ERROR IN CUT SCENE in Blades of Avernum Editor
Agent
Member # 2820
Profile #6
Be careful with the text bubbles; they can only be 38 characters in length, although you may have already checked up on that.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
ERROR IN CUT SCENE in Blades of Avernum
Agent
Member # 2820
Profile #6
Be careful with the text bubbles; they can only be 38 characters in length, although you may have already checked up on that.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Erika's old quarters.... in Blades of Avernum
Agent
Member # 2820
Profile #23
Wait, how do you reckon that one of those office's is Erika's?

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
BoA in german? in Blades of Avernum Editor
Agent
Member # 2820
Profile #15
I do not blame you for not understanding Jeff's manual. Some things are phrased very badly, like this:

====

Issuing a begindefine command does not just tell the program you are starting to change a thing. It
also makes that thing a copy of the thing of that type you last edited. In other words, if your script
contained these commands:
begindefinefloor 135;
(a bunch of stuff)
begindefinefloor 136;
// no extra data
begindefinefloor 137;

====

This would be better phrased as:

A begindefine[object] command tells the program that everything after it modifies that [object]. But it also copies all the information from the previous [object] into the current one. This was done to make repetitive objects more easily.

For example, take this code excerpt for townfolk:

begindefinecreature 74;
clear;
cr_name = "Townsman";
cr_level = 2;
cr_start_item 0 = 19;
cr_start_item_chance 0 = 100;
cr_start_item 1 = 20;
cr_start_item_chance 1 = 100;
cr_start_item 2 = 46;
cr_start_item_chance 2 = 100;
cr_default_attitude = 2;
cr_which_sheet = 1503;
cr_small_or_large_template = 1;
cr_default_courage = 0;

begindefinecreature 75; // the information from the above creature has been copied into the current one
cr_name = "Townswoman"; // just change the name
cr_which_sheet = 1504; // change the graphic

begindefinecreature 76; // the information from creature 75 has now been copied into 76
cr_name = "Townsman"; // name changed, but everything stays the same, etc.
cr_which_sheet = 1506;
begindefinecreature 77;

cr_name = "Townswoman";
cr_which_sheet = 1505;
begindefinecreature 78;

cr_name = "Townsman";
cr_which_sheet = 1575;
begindefinecreature 79;

cr_name = "Townswoman";
cr_which_sheet = 1576;

Defining the default courage, level, items, and such would have been very lengthy and a waste of space for such similar creatures.

[ Tuesday, July 27, 2004 05:42: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
BoA in german? in Blades of Avernum
Agent
Member # 2820
Profile #15
I do not blame you for not understanding Jeff's manual. Some things are phrased very badly, like this:

====

Issuing a begindefine command does not just tell the program you are starting to change a thing. It
also makes that thing a copy of the thing of that type you last edited. In other words, if your script
contained these commands:
begindefinefloor 135;
(a bunch of stuff)
begindefinefloor 136;
// no extra data
begindefinefloor 137;

====

This would be better phrased as:

A begindefine[object] command tells the program that everything after it modifies that [object]. But it also copies all the information from the previous [object] into the current one. This was done to make repetitive objects more easily.

For example, take this code excerpt for townfolk:

begindefinecreature 74;
clear;
cr_name = "Townsman";
cr_level = 2;
cr_start_item 0 = 19;
cr_start_item_chance 0 = 100;
cr_start_item 1 = 20;
cr_start_item_chance 1 = 100;
cr_start_item 2 = 46;
cr_start_item_chance 2 = 100;
cr_default_attitude = 2;
cr_which_sheet = 1503;
cr_small_or_large_template = 1;
cr_default_courage = 0;

begindefinecreature 75; // the information from the above creature has been copied into the current one
cr_name = "Townswoman"; // just change the name
cr_which_sheet = 1504; // change the graphic

begindefinecreature 76; // the information from creature 75 has now been copied into 76
cr_name = "Townsman"; // name changed, but everything stays the same, etc.
cr_which_sheet = 1506;
begindefinecreature 77;

cr_name = "Townswoman";
cr_which_sheet = 1505;
begindefinecreature 78;

cr_name = "Townsman";
cr_which_sheet = 1575;
begindefinecreature 79;

cr_name = "Townswoman";
cr_which_sheet = 1576;

Defining the default courage, level, items, and such would have been very lengthy and a waste of space for such similar creatures.

[ Tuesday, July 27, 2004 05:42: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Article: Basic Scripting For Complete Beginners in Blades of Avernum Editor
Agent
Member # 2820
Profile #3
EDIT: Uh, nevermind.

[ Monday, July 26, 2004 07:25: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Article: Basic Scripting For Complete Beginners in Blades of Avernum
Agent
Member # 2820
Profile #3
EDIT: Uh, nevermind.

[ Monday, July 26, 2004 07:25: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Group Guard in Blades of Avernum Editor
Agent
Member # 2820
Profile #1
Bump. Oh, yes, and do you think the 20 turn wait is a little much?

EDIT: I just read something disturbing in Kelandon's latest article and decided to whip this slightly modified version of the script together. My computer is an Athlon 64 3000+ with 512 MB of DDR400 RAM and a NVGF 5200 VC, so I can't really tell the difference myself, I'm afraid.

// groupguard.txt v1.03b
// by Keep[EZ] <net4less@sbcglobal.net>
// Version 1.0 - Released July 23, 2004, ready for test in the wild
// Version 1.03 - Fixed quite a things that were really bugging me
// Version 1.03b - Is there a performance difference between 1.03 and 1.03b?

// A more advanced guard script. Retains all the functionality of the original
// while giving it the ability to work together with other guards. When attacking,
// the guard will issue a call out to all the other characters in its group, which
// will hopefully respond by coming to its aid. When the guard receives a message,
// he will attempt to approach the calling character while noting the distressed
// character's latest location. If that character should die, the guard still tries
// to go to the deceased's position. For no real reason except to make the guards
// more lively, I made them fidget and patrol much more often. These guards will drop
// treasure unless you change the summon level line in the INIT_STATE. These guards
// won't actively hunt down the party, though they will be alerted, and as a side
// effect, will automatically target the party if there is no other choice.

// Memory Cells:
// Cell 0 - How creature moves.
// 0 - If 0, wander randomly.
// 1 - Stands still until a target appears.
// 2 - Completely immobile, even if target appears.
// 3 - Walk to a waypoint and then back to start. Use Cell 4 to
// indicate a waypoint.
// Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this
// is killed, set to 1.
// Cell 3 - Dialogue node to start with if talked to. if left at 0, this
// character doesn't talk.
// Cell 4 - If Cell 0, is not 3, this value is ignore. Otherwise, it is
// the number of a waypoint. This guard spends its time walking to that
// waypoint and back.
// Cell 9 - The group this guard belongs to; has to be 1-7

// Even if it isn't part of a group, the guard will still resond to ANY messages given
// to it so be careful when using this script along with other scripts that broadcast.
// If the guard is not part of a group, it will broadcast to creatures within 16 spaces.

begincreaturescript;

variables;

// loc_x and loc_y contain the coordinates of the character the guard is trying to help
// time_after counts how many turns have passed since the guard has had no one to help
short i,loc_x,loc_y,time_after = 0;
short gone_to_waypoint = 0;
short helping_char = -1; // the character that called for help
short no_message = 0; // counts how many turns the guard has had no messages

body;

beginstate INIT_STATE;
if (get_memory_cell(0) == 2)
set_mobility(ME,0);

set_char_script_mode(ME,1); // act even at distance
if ((get_memory_cell(9) <= 7) && (get_memory_cell(9) > 0))
add_char_to_group(ME,get_memory_cell(9));
if (get_attitude(ME) >= 10)
set_mobility(ME,1);
set_summon_level(ME,0); // change 0 to 1 if you don't want the guard dropping treasure

break;

beginstate DEAD_STATE;
// Set the appropriate stuff done flag for this character being dead
if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
set_flag(get_memory_cell(1),get_memory_cell(2),1);
if (what_group_in(ME) > 0) { // dying call for help
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
break;

beginstate START_STATE;
// Has the town gone hostile?
if (get_attitude(ME) >= 10) {
alert_char(ME);
set_mobility(ME,1);
}

// if I have a target for some reason, go attack it
if (target_ok()) {
if (dist_to_char(get_target()) <= 16)
set_state_continue(3);
else set_target(ME,-1);
}

// Look for a target, attack it if visible
if (select_target(ME,8,0)) {
set_state_continue(3);
}

// Have I been hit? Strike back!
if (who_hit_me() >= 0) {
set_target(ME,who_hit_me());
set_state_continue(3);
}

// If I have a message, go help the character whose number is the same as the message
// Otherwise, just peacefully move around. Go back to start, if I'm too far
// from where I started.
if ((my_current_message() >= 0) && (helping_char == -1)) { // current message will keep changing, so helping_char stores the first message
helping_char = my_current_message();
no_message = 0; // automatically breaks the 'not having messages' streak/counter
}
if (helping_char >= 0) {
set_state_continue(4); // state that deals with messages
}
if ((helping_char == -1) && (tick_difference(time_after,get_current_tick()) >= 10)) {
// tick_difference thrown in to make sure he doesn't go away in case he's needed
if (my_dist_from_start() >= 6) {
if (get_ran(1,1,100) < 40)
return_to_start(ME,1);
}
else if (get_memory_cell(0) == 0) {
fidget(ME,100);
}
else if (get_memory_cell(0) == 3) {
// march to waypoint and back
if (gone_to_waypoint == 0) {
if (approach_waypoint(ME,get_memory_cell(4),1))
gone_to_waypoint = 1;
}
else if (gone_to_waypoint == 1) {
if (return_to_start(ME,1))
gone_to_waypoint = 0;
}

}
}

// if we're in combat and the above didn't give me anything to do, just
// stop now. Otherwise, game will keep running script, and that eats up CPU time.
if (am_i_doing_action() == FALSE)
end_combat_turn();
break;

beginstate 3; // attacking
if (target_ok() == FALSE)
set_state(START_STATE);
do_attack();

// give message every time when attacking and doesn't have anyone to help
// NOTE: In general, this means that there will only be 1 broadcast every 7
// turns per group.

if (helping_char == -1) {
if (what_group_in(ME) > 0) {
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
helping_char = my_current_message();
print_named_str(ME,"calls for help!");
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
}

break;

beginstate 4; // if I had someone to help...
if (helping_char != my_number()) {
stop_moving(ME); // make sure he forgets the old path
if (char_ok(helping_char)) { // document last location of helping_char while he's alive
approach_char(ME,helping_char,1);
loc_x = char_loc_x(helping_char);
loc_y = char_loc_y(helping_char);
}
else { // else he died, so move to last known location
helping_char = -1;
if (move_to_loc_x_y(ME,loc_x,loc_y))
time_after = get_current_tick(); // time since there was no helping_char
}
}
if ((my_current_message() == -1) && (am_i_doing_action() == FALSE)) {
no_message = no_message + 1;
if (no_message >= 20) {
helping_char = -1; // if there was no messsage for 20 turns, probably no need to help anyone
time_after = get_current_tick();
}
}
set_state(START_STATE);
break;

beginstate TALKING_STATE;
if (get_memory_cell(3) == 0) {
print_str("Talking: It doesn't respond.");
end();
}
begin_talk_mode(get_memory_cell(3));
break;


[ Sunday, July 25, 2004 19:36: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Group Guard in Blades of Avernum
Agent
Member # 2820
Profile #1
Bump. Oh, yes, and do you think the 20 turn wait is a little much?

EDIT: I just read something disturbing in Kelandon's latest article and decided to whip this slightly modified version of the script together. My computer is an Athlon 64 3000+ with 512 MB of DDR400 RAM and a NVGF 5200 VC, so I can't really tell the difference myself, I'm afraid.

// groupguard.txt v1.03b
// by Keep[EZ] <net4less@sbcglobal.net>
// Version 1.0 - Released July 23, 2004, ready for test in the wild
// Version 1.03 - Fixed quite a things that were really bugging me
// Version 1.03b - Is there a performance difference between 1.03 and 1.03b?

// A more advanced guard script. Retains all the functionality of the original
// while giving it the ability to work together with other guards. When attacking,
// the guard will issue a call out to all the other characters in its group, which
// will hopefully respond by coming to its aid. When the guard receives a message,
// he will attempt to approach the calling character while noting the distressed
// character's latest location. If that character should die, the guard still tries
// to go to the deceased's position. For no real reason except to make the guards
// more lively, I made them fidget and patrol much more often. These guards will drop
// treasure unless you change the summon level line in the INIT_STATE. These guards
// won't actively hunt down the party, though they will be alerted, and as a side
// effect, will automatically target the party if there is no other choice.

// Memory Cells:
// Cell 0 - How creature moves.
// 0 - If 0, wander randomly.
// 1 - Stands still until a target appears.
// 2 - Completely immobile, even if target appears.
// 3 - Walk to a waypoint and then back to start. Use Cell 4 to
// indicate a waypoint.
// Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this
// is killed, set to 1.
// Cell 3 - Dialogue node to start with if talked to. if left at 0, this
// character doesn't talk.
// Cell 4 - If Cell 0, is not 3, this value is ignore. Otherwise, it is
// the number of a waypoint. This guard spends its time walking to that
// waypoint and back.
// Cell 9 - The group this guard belongs to; has to be 1-7

// Even if it isn't part of a group, the guard will still resond to ANY messages given
// to it so be careful when using this script along with other scripts that broadcast.
// If the guard is not part of a group, it will broadcast to creatures within 16 spaces.

begincreaturescript;

variables;

// loc_x and loc_y contain the coordinates of the character the guard is trying to help
// time_after counts how many turns have passed since the guard has had no one to help
short i,loc_x,loc_y,time_after = 0;
short gone_to_waypoint = 0;
short helping_char = -1; // the character that called for help
short no_message = 0; // counts how many turns the guard has had no messages

body;

beginstate INIT_STATE;
if (get_memory_cell(0) == 2)
set_mobility(ME,0);

set_char_script_mode(ME,1); // act even at distance
if ((get_memory_cell(9) <= 7) && (get_memory_cell(9) > 0))
add_char_to_group(ME,get_memory_cell(9));
if (get_attitude(ME) >= 10)
set_mobility(ME,1);
set_summon_level(ME,0); // change 0 to 1 if you don't want the guard dropping treasure

break;

beginstate DEAD_STATE;
// Set the appropriate stuff done flag for this character being dead
if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
set_flag(get_memory_cell(1),get_memory_cell(2),1);
if (what_group_in(ME) > 0) { // dying call for help
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
break;

beginstate START_STATE;
// Has the town gone hostile?
if (get_attitude(ME) >= 10) {
alert_char(ME);
set_mobility(ME,1);
}

// if I have a target for some reason, go attack it
if (target_ok()) {
if (dist_to_char(get_target()) <= 16)
set_state_continue(3);
else set_target(ME,-1);
}

// Look for a target, attack it if visible
if (select_target(ME,8,0)) {
set_state_continue(3);
}

// Have I been hit? Strike back!
if (who_hit_me() >= 0) {
set_target(ME,who_hit_me());
set_state_continue(3);
}

// If I have a message, go help the character whose number is the same as the message
// Otherwise, just peacefully move around. Go back to start, if I'm too far
// from where I started.
if ((my_current_message() >= 0) && (helping_char == -1)) { // current message will keep changing, so helping_char stores the first message
helping_char = my_current_message();
no_message = 0; // automatically breaks the 'not having messages' streak/counter
}
if (helping_char >= 0) {
set_state_continue(4); // state that deals with messages
}
if ((helping_char == -1) && (tick_difference(time_after,get_current_tick()) >= 10)) {
// tick_difference thrown in to make sure he doesn't go away in case he's needed
if (my_dist_from_start() >= 6) {
if (get_ran(1,1,100) < 40)
return_to_start(ME,1);
}
else if (get_memory_cell(0) == 0) {
fidget(ME,100);
}
else if (get_memory_cell(0) == 3) {
// march to waypoint and back
if (gone_to_waypoint == 0) {
if (approach_waypoint(ME,get_memory_cell(4),1))
gone_to_waypoint = 1;
}
else if (gone_to_waypoint == 1) {
if (return_to_start(ME,1))
gone_to_waypoint = 0;
}

}
}

// if we're in combat and the above didn't give me anything to do, just
// stop now. Otherwise, game will keep running script, and that eats up CPU time.
if (am_i_doing_action() == FALSE)
end_combat_turn();
break;

beginstate 3; // attacking
if (target_ok() == FALSE)
set_state(START_STATE);
do_attack();

// give message every time when attacking and doesn't have anyone to help
// NOTE: In general, this means that there will only be 1 broadcast every 7
// turns per group.

if (helping_char == -1) {
if (what_group_in(ME) > 0) {
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
helping_char = my_current_message();
print_named_str(ME,"calls for help!");
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
}

break;

beginstate 4; // if I had someone to help...
if (helping_char != my_number()) {
stop_moving(ME); // make sure he forgets the old path
if (char_ok(helping_char)) { // document last location of helping_char while he's alive
approach_char(ME,helping_char,1);
loc_x = char_loc_x(helping_char);
loc_y = char_loc_y(helping_char);
}
else { // else he died, so move to last known location
helping_char = -1;
if (move_to_loc_x_y(ME,loc_x,loc_y))
time_after = get_current_tick(); // time since there was no helping_char
}
}
if ((my_current_message() == -1) && (am_i_doing_action() == FALSE)) {
no_message = no_message + 1;
if (no_message >= 20) {
helping_char = -1; // if there was no messsage for 20 turns, probably no need to help anyone
time_after = get_current_tick();
}
}
set_state(START_STATE);
break;

beginstate TALKING_STATE;
if (get_memory_cell(3) == 0) {
print_str("Talking: It doesn't respond.");
end();
}
begin_talk_mode(get_memory_cell(3));
break;


[ Sunday, July 25, 2004 19:36: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
How do I get people to go back to an old topic? in General
Agent
Member # 2820
Profile #2
Thank you, Your Postliness. Seriously, though, I can't figure out how to solve the problem described in my topic...

--------------------
What do I put here?
-Garrison
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
How do I get people to go back to an old topic? in General
Agent
Member # 2820
Profile #0
Here is the situation. I posted my Group Guard script in the Blades of Avernum Editor forum, but now I want to ask for some help with it.

But posting again would be double posting, editing won't draw its attention, and creating another topic would be redundant.

What would you do in a situation like this?

By the way, I have the real question placed in the my topic. And yes, this was an elaborate scheme to get a conversation going and for some people to help me with the thing.

--------------------
What do I put here?
-Garrison
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Image maps in General
Agent
Member # 2820
Profile #11
Interesting, but not something I haven't seen. Image maps with pop-ups and such. Nice addition to your website, though.

--------------------
What do I put here?
-Garrison
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
in a3 where you get the name bojar from in The Avernum Trilogy
Agent
Member # 2820
Profile #6
I'd imagine a self-employed mage who thinks he's better than he really is, and likes to live in seclusion by the ocean in a reclusive tower with brigands, a spiny worm, and lots of slimes to keep him company would love to call himself Slick. He sure got a deal on the fake estate.

[party steps into secret inner sanctum]
"Hi, I'm Slick. Want to be my friend?"
[party leader shrugs, shoots arrow at Slick's head]
"People that call themselves Slick don't deserve to live..."

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Blades of Avernum Center : Official Annoucement in Blades of Avernum
Agent
Member # 2820
Profile #15
I agree totally with Kel. I remember the good old Blades of Exile Ring, though, and it was good. But probably the reason for that is that there wasn't too much redundancy or sites that tried to provide services that were already out there.

I think a personal site + BoA scenario archive would be the best thing. Perhaps some articles on whatever would be good, as well.

I just hope the scenario thing won't kill your bandwidth.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Problem with text (again) in Blades of Avernum Editor
Agent
Member # 2820
Profile #7
Every state is code, Overwhelming. You only need to use the code = thing inside of data files that allow scripting, which would currently only be dialogue ones.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Problem with text (again) in Blades of Avernum
Agent
Member # 2820
Profile #7
Every state is code, Overwhelming. You only need to use the code = thing inside of data files that allow scripting, which would currently only be dialogue ones.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Homeland: The Stone of Night in Tech Support
Agent
Member # 2820
Profile #4
I also wonder why Jeff endorses that game. But, if the demo ran under XP, why doesn't the full version? Trying to access 9x libraries?

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Group Guard in Blades of Avernum Editor
Agent
Member # 2820
Profile #0
Check out my first script!

// groupguard.txt v1.03
// by Keep[EZ] <net4less@sbcglobal.net>
// Version 1.0 - Released July 23, 2004, ready for test in the wild
// Version 1.03 - Fixed quite a things that were really bugging me

// A more advanced guard script. Retains all the functionality of the original
// while giving it the ability to work together with other guards. When attacking,
// the guard will issue a call out to all the other characters in its group, which
// will hopefully respond by coming to its aid. When the guard receives a message,
// he will attempt to approach the calling character while noting the distressed
// character's latest location. If that character should die, the guard still tries
// to go to the deceased's position. For no real reason except to make the guards
// more lively, I made them fidget and patrol much more often. These guards will drop
// treasure unless you change the summon level line in the INIT_STATE. These guards
// won't actively hunt down the party, though they will be alerted, and as a side
// effect, will automatically target the party if there is no other choice.

// Memory Cells:
// Cell 0 - How creature moves.
// 0 - If 0, wander randomly.
// 1 - Stands still until a target appears.
// 2 - Completely immobile, even if target appears.
// 3 - Walk to a waypoint and then back to start. Use Cell 4 to
// indicate a waypoint.
// Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this
// is killed, set to 1.
// Cell 3 - Dialogue node to start with if talked to. if left at 0, this
// character doesn't talk.
// Cell 4 - If Cell 0, is not 3, this value is ignore. Otherwise, it is
// the number of a waypoint. This guard spends its time walking to that
// waypoint and back.
// Cell 9 - The group this guard belongs to; has to be 1-7

// Even if it isn't part of a group, the guard will still resond to ANY messages given
// to it so be careful when using this script along with other scripts that broadcast.
// If the guard is not part of a group, it will broadcast to creatures within 16 spaces.

begincreaturescript;

variables;

// loc_x and loc_y contain the coordinates of the character the guard is trying to help
// time_after counts how many turns have passed since the guard has had no one to help
short i,loc_x,loc_y,time_after = 0;
short gone_to_waypoint = 0;
short helping_char = -1; // the character that called for help
short no_message = 0; // counts how many turns the guard has had no messages

body;

beginstate INIT_STATE;
if (get_memory_cell(0) == 2)
set_mobility(ME,0);

set_char_script_mode(ME,1); // act even at distance
if ((get_memory_cell(9) <= 7) && (get_memory_cell(9) > 0))
add_char_to_group(ME,get_memory_cell(9));
if (get_attitude(ME) >= 10)
set_mobility(ME,1);
set_summon_level(ME,0); // change 0 to 1 if you don't want the guard dropping treasure

break;

beginstate DEAD_STATE;
// Set the appropriate stuff done flag for this character being dead
if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
set_flag(get_memory_cell(1),get_memory_cell(2),1);
if (what_group_in(ME) > 0) { // dying call for help
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
break;

beginstate START_STATE;
// Has the town gone hostile?
if (get_attitude(ME) >= 10) {
alert_char(ME);
set_mobility(ME,1);
}

// if I have a target for some reason, go attack it
if (target_ok()) {
if (dist_to_char(get_target()) <= 16)
set_state_continue(3);
else set_target(ME,-1);
}

// Look for a target, attack it if visible
if (select_target(ME,8,0)) {
set_state_continue(3);
}

// Have I been hit? Strike back!
if (who_hit_me() >= 0) {
set_target(ME,who_hit_me());
set_state_continue(3);
}

// If I have a message, go help the character whose number is the same as the message
// Otherwise, just peacefully move around. Go back to start, if I'm too far
// from where I started.
if ((my_current_message() >= 0) && (helping_char == -1)) { // current message will keep changing, so helping_char stores the first message
helping_char = my_current_message();
no_message = 0; // automatically breaks the 'not having messages' streak/counter
}
if (helping_char >= 0) {
if (helping_char != my_number()) {
stop_moving(ME); // make sure he forgets the old path
if (char_ok(helping_char)) { // document last location of helping_char while he's alive
approach_char(ME,helping_char,1);
loc_x = char_loc_x(helping_char);
loc_y = char_loc_y(helping_char);
}
else { // else he died, so move to last known location
helping_char = -1;
if (move_to_loc_x_y(ME,loc_x,loc_y))
time_after = get_current_tick(); // time since there was no helping_char
}
}
if ((my_current_message() == -1) && (am_i_doing_action() == FALSE)) {
no_message = no_message + 1;
if (no_message >= 20) {
helping_char = -1; // if there was no messsage for 20 turns, probably no need to help anyone
time_after = get_current_tick();
}
}
}
if ((helping_char == -1) && (tick_difference(time_after,get_current_tick()) >= 10)) {
// tick_difference thrown in to make sure he doesn't go away in case he's needed
if (my_dist_from_start() >= 6) {
if (get_ran(1,1,100) < 40)
return_to_start(ME,1);
}
else if (get_memory_cell(0) == 0) {
fidget(ME,100);
}
else if (get_memory_cell(0) == 3) {
// march to waypoint and back
if (gone_to_waypoint == 0) {
if (approach_waypoint(ME,get_memory_cell(4),1))
gone_to_waypoint = 1;
}
else if (gone_to_waypoint == 1) {
if (return_to_start(ME,1))
gone_to_waypoint = 0;
}

}
}

// if we're in combat and the above didn't give me anything to do, just
// stop now. Otherwise, game will keep running script, and that eats up CPU time.
if (am_i_doing_action() == FALSE)
end_combat_turn();
break;

beginstate 3; // attacking
if (target_ok() == FALSE)
set_state(START_STATE);
do_attack();

// give message every time when attacking and doesn't have anyone to help
// NOTE: In general, this means that there will only be 1 broadcast every 7
// turns per group.

if (helping_char == -1) {
if (what_group_in(ME) > 0) {
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
helping_char = my_current_message();
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
}

break;

beginstate TALKING_STATE;
if (get_memory_cell(3) == 0) {
print_str("Talking: It doesn't respond.");
end();
}
begin_talk_mode(get_memory_cell(3));
break;
EDIT: The script works very well in my opinion, except in this situation: Someone (possibly one of my guards that aren't part of a group) broadcasts a message. A guard in range picks it up and goes to help, but he won't tell the others in his group. This could be easily solved, but the code must be as efficient as possible, and I only want them broadcasting messages WHEN THERE IS NEW INFORMATION.

Does anyone have any ideas?

[ Sunday, July 25, 2004 18:53: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Group Guard in Blades of Avernum
Agent
Member # 2820
Profile #0
Check out my first script!

// groupguard.txt v1.03
// by Keep[EZ] <net4less@sbcglobal.net>
// Version 1.0 - Released July 23, 2004, ready for test in the wild
// Version 1.03 - Fixed quite a things that were really bugging me

// A more advanced guard script. Retains all the functionality of the original
// while giving it the ability to work together with other guards. When attacking,
// the guard will issue a call out to all the other characters in its group, which
// will hopefully respond by coming to its aid. When the guard receives a message,
// he will attempt to approach the calling character while noting the distressed
// character's latest location. If that character should die, the guard still tries
// to go to the deceased's position. For no real reason except to make the guards
// more lively, I made them fidget and patrol much more often. These guards will drop
// treasure unless you change the summon level line in the INIT_STATE. These guards
// won't actively hunt down the party, though they will be alerted, and as a side
// effect, will automatically target the party if there is no other choice.

// Memory Cells:
// Cell 0 - How creature moves.
// 0 - If 0, wander randomly.
// 1 - Stands still until a target appears.
// 2 - Completely immobile, even if target appears.
// 3 - Walk to a waypoint and then back to start. Use Cell 4 to
// indicate a waypoint.
// Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this
// is killed, set to 1.
// Cell 3 - Dialogue node to start with if talked to. if left at 0, this
// character doesn't talk.
// Cell 4 - If Cell 0, is not 3, this value is ignore. Otherwise, it is
// the number of a waypoint. This guard spends its time walking to that
// waypoint and back.
// Cell 9 - The group this guard belongs to; has to be 1-7

// Even if it isn't part of a group, the guard will still resond to ANY messages given
// to it so be careful when using this script along with other scripts that broadcast.
// If the guard is not part of a group, it will broadcast to creatures within 16 spaces.

begincreaturescript;

variables;

// loc_x and loc_y contain the coordinates of the character the guard is trying to help
// time_after counts how many turns have passed since the guard has had no one to help
short i,loc_x,loc_y,time_after = 0;
short gone_to_waypoint = 0;
short helping_char = -1; // the character that called for help
short no_message = 0; // counts how many turns the guard has had no messages

body;

beginstate INIT_STATE;
if (get_memory_cell(0) == 2)
set_mobility(ME,0);

set_char_script_mode(ME,1); // act even at distance
if ((get_memory_cell(9) <= 7) && (get_memory_cell(9) > 0))
add_char_to_group(ME,get_memory_cell(9));
if (get_attitude(ME) >= 10)
set_mobility(ME,1);
set_summon_level(ME,0); // change 0 to 1 if you don't want the guard dropping treasure

break;

beginstate DEAD_STATE;
// Set the appropriate stuff done flag for this character being dead
if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0))
set_flag(get_memory_cell(1),get_memory_cell(2),1);
if (what_group_in(ME) > 0) { // dying call for help
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
break;

beginstate START_STATE;
// Has the town gone hostile?
if (get_attitude(ME) >= 10) {
alert_char(ME);
set_mobility(ME,1);
}

// if I have a target for some reason, go attack it
if (target_ok()) {
if (dist_to_char(get_target()) <= 16)
set_state_continue(3);
else set_target(ME,-1);
}

// Look for a target, attack it if visible
if (select_target(ME,8,0)) {
set_state_continue(3);
}

// Have I been hit? Strike back!
if (who_hit_me() >= 0) {
set_target(ME,who_hit_me());
set_state_continue(3);
}

// If I have a message, go help the character whose number is the same as the message
// Otherwise, just peacefully move around. Go back to start, if I'm too far
// from where I started.
if ((my_current_message() >= 0) && (helping_char == -1)) { // current message will keep changing, so helping_char stores the first message
helping_char = my_current_message();
no_message = 0; // automatically breaks the 'not having messages' streak/counter
}
if (helping_char >= 0) {
if (helping_char != my_number()) {
stop_moving(ME); // make sure he forgets the old path
if (char_ok(helping_char)) { // document last location of helping_char while he's alive
approach_char(ME,helping_char,1);
loc_x = char_loc_x(helping_char);
loc_y = char_loc_y(helping_char);
}
else { // else he died, so move to last known location
helping_char = -1;
if (move_to_loc_x_y(ME,loc_x,loc_y))
time_after = get_current_tick(); // time since there was no helping_char
}
}
if ((my_current_message() == -1) && (am_i_doing_action() == FALSE)) {
no_message = no_message + 1;
if (no_message >= 20) {
helping_char = -1; // if there was no messsage for 20 turns, probably no need to help anyone
time_after = get_current_tick();
}
}
}
if ((helping_char == -1) && (tick_difference(time_after,get_current_tick()) >= 10)) {
// tick_difference thrown in to make sure he doesn't go away in case he's needed
if (my_dist_from_start() >= 6) {
if (get_ran(1,1,100) < 40)
return_to_start(ME,1);
}
else if (get_memory_cell(0) == 0) {
fidget(ME,100);
}
else if (get_memory_cell(0) == 3) {
// march to waypoint and back
if (gone_to_waypoint == 0) {
if (approach_waypoint(ME,get_memory_cell(4),1))
gone_to_waypoint = 1;
}
else if (gone_to_waypoint == 1) {
if (return_to_start(ME,1))
gone_to_waypoint = 0;
}

}
}

// if we're in combat and the above didn't give me anything to do, just
// stop now. Otherwise, game will keep running script, and that eats up CPU time.
if (am_i_doing_action() == FALSE)
end_combat_turn();
break;

beginstate 3; // attacking
if (target_ok() == FALSE)
set_state(START_STATE);
do_attack();

// give message every time when attacking and doesn't have anyone to help
// NOTE: In general, this means that there will only be 1 broadcast every 7
// turns per group.

if (helping_char == -1) {
if (what_group_in(ME) > 0) {
alert_char(1000 + what_group_in(ME));
give_char_message(1000 + what_group_in(ME),my_number());
helping_char = my_current_message();
}
else broadcast_message_from_x_y(my_loc_x(),my_loc_y(),my_number(),16);
}

break;

beginstate TALKING_STATE;
if (get_memory_cell(3) == 0) {
print_str("Talking: It doesn't respond.");
end();
}
begin_talk_mode(get_memory_cell(3));
break;
EDIT: The script works very well in my opinion, except in this situation: Someone (possibly one of my guards that aren't part of a group) broadcasts a message. A guard in range picks it up and goes to help, but he won't tell the others in his group. This could be easily solved, but the code must be as efficient as possible, and I only want them broadcasting messages WHEN THERE IS NEW INFORMATION.

Does anyone have any ideas?

[ Sunday, July 25, 2004 18:53: Message edited by: Keep ]

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00
Zik and Mundt in The Avernum Trilogy
Agent
Member # 2820
Profile #3
Remember, of course, that you can't reach these places in the demo.

--------------------
Thuryl: I mean, most of us don't go around consuming our own bodily fluids, no matter how delicious they are.
====
Alorael: War and violence would end if we all had each other's babies!
====
Drakefyre: Those are hideous mangos.
Posts: 1415 | Registered: Thursday, March 27 2003 08:00

Pages