Jump to content

BoA Editor Suggestions


*i

Recommended Posts

Not sure if this is possible, but...

 

short space_blocked(short loc x, short loc y)

 

Checks to see if the space is blocked. I'm not sure that there is any way to do this right now, minus the possibility of an ungodly-long while and if statement- if(get_terrain() == 67 || get_terrain() == 68 || ...) It would be totally unwieldy and not even remotely worth the trouble for the designer.

 

short creature_on_space(short loc x, short lox y)

 

Checks to see if there is a creature on the space. I suppose a while(i < 120) statement could be used and then the monster's coordinates checked accordingly, but it'd be a nice convenience to have.

Link to comment
Share on other sites

I heartily second the first suggestion (an interesting turn of phrase), if TM is saying what I think he is, namely to check whether a space is proper for a creature to be on at all -- the call is_blocked sounds frustratingly similar to this, but it's not at all. The new call would check whether the space or terrain type was blocked also.

 

As for the second, though, char_on_spot and char_on_loc do this, if I'm understanding that post correctly.

Link to comment
Share on other sites

I have no idea if this can be done and I've only played around with BoA editor using the demo. But I would of hoped there was a much more "user friendly" interface when it came to editing and creating the basics such as monsters, items and such, similiar to what was in BoE. Just as someone new to the editor it gets alittle daunting when all this needs to be written in somewhere.

 

If this is available it seems to be incredibly hard to find and not very obvious. Sorry if this isn't relevant as I see most of these posts are about adding new scripts in. But I thought I'd at least make my suggestion.

Link to comment
Share on other sites

This isn't exactly in the same vein, and would probably require major hacking, but it would be useful if I could export towns to an outside file, then be able to place them in another scenario. Being able to merge scenarios together would also make collaborative work much easier.

 

Like I said, I know this would require big adjustments, but it would save a lot of work at times.

Link to comment
Share on other sites

void deny_spell(which_spell)

 

I would like to able to lock out certain spells. I could remove the spells, but then I would have to keep track of who had what, plus they could use the editor to get those levels back.

 

Instead I just want to disable this spell(s) so that it can't be used.

Link to comment
Share on other sites

Good god, I can't believe we all forgot about cast_spell() and deny_spell(). This would be a major engine enhancement, but I'd like the attacking system to be much, much more complex. Um, probably belongs more in a new game.

 

Currently, you can only set a target and have the creature attack it. You can't specify a specific group of targets to attack, nor can you have it attack neutral things. And what is with not being able to check for target's immunities? At least not easily.

 

EDIT: Suggestion:

Fix(?) the joining NPCs so that they can use the custom script states beside INIT START and DEAD once they've joined up in the party..

Link to comment
Share on other sites

One call that would be nice:

 

get_immunity(immunity_type)

 

Returns a value from 0 to 100 depending on the assigned immunity value.

 

set_immunity(immunity_type)

 

Sets a value from 0 to 100 to the immunity_type.

 

It is possible to remove spells from an NPC using the change_spell_level() calls. Although this call would be nice:

 

cast_spell(mage_or_priest, which_spell, spell_level, is_forced)

 

For creature AI scripts only. Causes the creature to cast spell which_spell at spell_level depending on mage_or_priest regardless of mage or priest spell ability. If is_forced is 0, the spell is only cast if the creature has enough spell points, otherwise the spell is always cast.

Link to comment
Share on other sites

I'd like the added feature of setting how fast a monster's health and spell points regenerate in the custom objects script, defaulting to 1/8th health per turn as it is now.

 

A medley of calls (please update, *i):

 

If possible, maybe the cast_spell() call could force other characters to cast spells, other than the current one.

 

void set_hp_regen(short which_char, short what_percentage) - Gets what percentage of which_char's maximum health is regained every tick.

 

void set_hp_regen(short which_char_or_group, short what_percentage) - Sets what percentage of which_char_or_group's maximum health is regained every tick.

 

short get_sp_regen(short which_char, short what_percentage) - Returns what percentage of which_char's maximum spell points are regained every tick.

 

short get_sp_regen(short which_char_or_group, short what_percentage) - Returns what percentage of which_char_or_group's maximum spell points are regained every tick.

 

void deduct_ap_from(short which_char, short how_much) - Counterpart to deduct_ap(), but you can affect other character's ap. Probably more useful in terrain scripts and custom abilities. The affected character's ap is reduced by how_much, which can be negative to add ap.

 

short check_path_to_loc(short loc_x, short loc)_y) - Has the pathing engine calculate whether or not the current character can reach location {loc_x,loc_y}. This call does not actually move the character along the path, though. Returns 1 if a path is found, 0 if there is definitely no path, -1 if there was no path found because the pathing engine stopped before exhausting all possible nodes.

 

short check_path_to_wayp(short which_waypoint) - Has the pathing engine calculate whether or not the current character can reach waypoint which_waypoint. This call does not actually move the character along the path, though. Returns 1 if a path is found, 0 if there is definitely no path, -1 if there was no path found because the pathing engine stopped before exhausting all possible nodes.

 

short check_path_between_locs(short loc_x1, short loc_y1, short loc_x2, short loc_y2) - Has the pathing engine calculate whether or not a character at location {loc_x1,loc_y1} could reach location {loc_x2,loc_y2}. Returns 1 if a path is found, 0 if there is definitely no path, -1 if there was no path found because the pathing engine stopped before exhausting all possible nodes.

 

I also suggest that there is an option for denying all spells with the previously suggested deny_spell() call, and then one would have to add the wanted spells.

Link to comment
Share on other sites

short get_inven_item_type(short which_slot);

short get_inven_item_level(short which_slot);

short get_inven_item_bonus(short which_slot);

short get_inven_item_abil(short which_slot, short which_ability);

short get_inven_item_abilstr(short which_slot, short which_ability);

 

So that we can check every item in the party's inventory for an item type, level, bonus, ability and ability strength. It would make parties entering scenarios much more reasonable.

 

short revive(short pcent_or_amt, short amt);

 

Called in a DEATH_STATE, so that a creature can still be alive even when beaten up. (Because really, half of the times I use the death node is to explain why somebody *isn't* dead, after all. :p )

 

More as I think of them.

Link to comment
Share on other sites

Quote:
Originally written by *i:
If the player wants to cheat, they will find a way. If the only reason for deny_spell() is really to ensure against that, then there is no reason for it. If players want to cheat, let them. It's their loss.
How about this:

deny_spell(what_spell, what_char_group, is_items, how_long)

What spell is what spell#
What_char_group means it can be any char, or a group. -1 means all chars
is_items, 0 or 1. 0 = Not for items, 1 = items too.
how_long gives a time limit. -1 means forever, 0 disables.

And yes, the whole point is to disable spells.
Link to comment
Share on other sites

I'm still not convinced that it is even doable without major engine modification, let alone necessary.

 

This seems like a MAJOR modification for such a little gain. What will significantly be improved by it? All I see now are periferal things that could be done other ways. Keeping the list reasonable is the only way we have of this being considered.

Link to comment
Share on other sites

You could always do something like:

 

Code:
i = 6;while (i <= 60) { change_spell_level(); i = i + 1;}
I can't recall the exact call that changes spell level right now, so I could be wrong on that. Put this in the entry state with each spell you want to omit and you should be fine. Just make sure summoned creatures cannot be casters or place it to run periodically in the START_STATE.

 

But seriously, the real problem with deny_spell() is it requires engine modification to the coded spellcasting AI. This is very unlikely to happen as it will create version problems among the games.

Link to comment
Share on other sites

More suggestions:

 

Data storage and Manipulation

 

vector v1(n)

matrix m1(m,n)

 

Placed in the variables section. Creates either: a vector array of size (1xn) or a matrix array of size (mxn) to store data. If full matrices are too much, vectors would be fine.

 

v1(i)

m1(i,j)

 

Returns the ith component of vector v1 and the i,jth component of matrix m1 respectively.

 

General Calls

 

run_imported_state(file_name, state_number);

run_imported_state_continue(file_name, state_number);

 

Runs state state_number out of file file_name. The former call ends the current call whereas the latter finishes the given call. See set_state() and set_state_continue.

 

Improved Spellcasting Calls

 

If we want to suggest something that can modify the way creatures cast spells, why not make it a bit more streamlined.

 

cr_spell_lib(file_name)

import_spell_lib(file_name)

 

Placed either in scenario data script for the former and in the INIT_STATE of creature script for the latter. Gives a range or library of acceptable spells to be cast which is stored in a text file like a script. If call is not given, defaults to some default spell library. Use of this call in a creature script clears the current creature's spell library.

 

add_spell_to_lib(mage_or_priest, which_spell, spell_level, spell_frequency);

 

Adds spell (mage spell for mage_or_priest = 0, priest spell for mage_or_priest = 1) which_spell at spell level spell_level to the library text file. Monster casts the spell seldomly for spell_frequency = 0, uncommonly for spell_frequency = 1, and commomly otherwise.

 

I'm not sure if these are implementable or not, but it should be a good way of modulating what spells creatures can cast.

Link to comment
Share on other sites

That is an EXTREME engine modification, although arrays and matrices would be ever so helpful. Or, in the style of C:

 

short v1

 

Now that I think of it, in the custom object scripts, how come the arrays aren't enclosed in brackets?

 

The spell library idea is a great one, and I think it could be implemented with little creative work from Jeff. But the frequency thing might be a little too much to ask for, since the basic AI for all creatures is pretty much consistent and hard coded throughout. I would imagine the file would be like this:

 

Code:
 beginspelllib;ORIGINAL_MAGE; // The original stuff must be manually typed in by you// FORMAT: spell_number = spell_level// clear; clears all spells in blockclear;5 = 5;19 = 1;ORIGINAL_PRIEST;0 = 11;10 = 4;CURRENT_MAGE;//BLAH BLAH BLAHCURRENT_PRIEST; 
EDIT: When are you going to update the front post and send this to JZ?
Link to comment
Share on other sites

Um, why the hell do you need spell libraries? You can do this already with change_spell_level, as you pointed out.

 

I've been maintaining the organized list here . Since it's so long at this point, we probably ought to prioritize and pick out the best ones once we're done brainstorming. That could very well be another thread.

Link to comment
Share on other sites

Spell libraries would be nice, but this form of it wouldn't be necessary if he defined an #include <thingus.txt> statement.

 

I'm going to look through this and sift out what seems reasonable. You can start the refinement topic, if you wish, Kel.

 

And this:

 

short waypoint_x(short which_wayp) - Returns the x coordinate of waypoint which_wayp.

 

short waypoint_y(short which_wayp) - Returns the y coordinate of waypoint which_wayp.

 

EDIT: There are also several issues/bugs to resolve with the current engine. I have a list of them somewhere on my computer since I listed them as I saw them.

Link to comment
Share on other sites

Spell libraries wouldn't be necessary, but just serve as a way to tell which spells we want a certain monster to use. Of course, this is probably not implementable anyway, so I would put priority as quite low. I suggested it as an alternative to the deny_spell() command which seemed limited.

 

Kel, think you can modify the set_immunity call such that it reads:

 

set_immunity(immunity_type, value);

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...