Cpt. Wrathbow's WML questions
Moderator: Forum Moderators
Forum rules
- Please use [code] BBCode tags in your posts for embedding WML snippets.
- To keep your code readable so that others can easily help you, make sure to indent it following our conventions.
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Cpt. Wrathbow's WML questions
In my RPG, where it's entirely possible (and likely) for a unit to levelup 10 or more times, I want to increase the unit's level every time it levels up, even though it's really just getting a custom AMLA, so that the level value reflects how many times the unit has leveled up. This is easy enough to do with an event that triggers upon advancement and manually increases the unit's level, but there's a problem with this: I don't want enemy units to be gaining tons of XP just for fighting the unit. Is there a way I can make the level value high, while keeping the fight-but-not-kill reward XP at 2?
Last edited by Captain_Wrathbow on August 12th, 2010, 10:44 pm, edited 2 times in total.
Re: Making "level" behave differently
Not without decreasing the level in an attack event and restoring it in an attack end event...and even then you could occasionally get wrong results displayed in the attack dialog in case the enemy would levelup and fullheal if it got the full XP but wouldn't with the lowered XP.
Re: Making "level" behave differently
Or you could go and mess with the game configs, so that XP for fighting/killing is lower. But it would also affect the players, which might be a bother...
http://wiki.wesnoth.org/GameConfigWML
http://wiki.wesnoth.org/LuaWML:Misc#wesnoth.game_config
You can take a peek at Paintball Era for the Lua version of this (second link)
Other ways: manually remove some experience from enemies in a attack end event, or make the XP requirement for enemies higher.
http://wiki.wesnoth.org/GameConfigWML
http://wiki.wesnoth.org/LuaWML:Misc#wesnoth.game_config
You can take a peek at Paintball Era for the Lua version of this (second link)
Other ways: manually remove some experience from enemies in a attack end event, or make the XP requirement for enemies higher.
Jazz is not dead, it just smells funny - Frank Zappa
Current projects: Internet meme Era, The Settlers of Wesnoth
Current projects: Internet meme Era, The Settlers of Wesnoth
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Re: Making "level" behave differently
Hmm... so there's really no neat way of doing it. Perhaps I'll just settle for not changing the level value.
- Ken_Oh
- Moderator Emeritus
- Posts: 2178
- Joined: February 6th, 2006, 4:03 am
- Location: Baltimore, Maryland, USA
Re: Making "level" behave differently
Yeah, for Wesband I went with sub-leveling and then changing the real unit level for every 5 sub-levels.
Re: Making "level" behave differently
Give the players a "dummy trait" that just increases on level up and amla. It won't affect anything, it will just say your character level.
Dunno if that's possible to do, but I think it would be a better solution than fiddling with the lvl. As it won't affect the enemies experience gained throught combat or killing.
Dunno if that's possible to do, but I think it would be a better solution than fiddling with the lvl. As it won't affect the enemies experience gained throught combat or killing.
"Mysteries are revealed in the light of reason."
-
- Inactive Developer
- Posts: 2461
- Joined: August 15th, 2008, 8:46 pm
- Location: Germany
Re: Making "level" behave differently
setting attacker.experience = attacker.experience - defender.level in an attack event (filter so that only chosen sides are affected) ? not sure about negative experience causing problemszookeeper wrote:Not without decreasing the level in an attack event and restoring it in an attack end event...and even then you could occasionally get wrong results displayed in the attack dialog in case the enemy would levelup and fullheal if it got the full XP but wouldn't with the lowered XP.
game config (lua or whatever) can only set experience for killing a unit
projects (BfW 1.12):
A Simple Campaign: campaign draft for wml starters • Plan Your Advancements: mp mod
The Earth's Gut: sp campaign • Settlers of Wesnoth: mp scenario • Wesnoth Lua Pack: lua tags and utils
updated to 1.8 and handed over: A Gryphon's Tale: sp campaign
A Simple Campaign: campaign draft for wml starters • Plan Your Advancements: mp mod
The Earth's Gut: sp campaign • Settlers of Wesnoth: mp scenario • Wesnoth Lua Pack: lua tags and utils
updated to 1.8 and handed over: A Gryphon's Tale: sp campaign
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Re: Making "level" behave differently
Would be possible, but then there would be two things in the info box showing the unit level...Vendanna wrote:Give the players a "dummy trait" that just increases on level up and amla. It won't affect anything, it will just say your character level.
Dunno if that's possible to do, but I think it would be a better solution than fiddling with the lvl. As it won't affect the enemies experience gained throught combat or killing.
I thought about that, but decided against it for the same reason you mentioned at the end.Anonymissimus wrote:setting attacker.experience = attacker.experience - defender.level in an attack event (filter so that only chosen sides are affected) ? not sure about negative experience causing problems
But you can't view what sublevel you're on. At least not without some ugly, inconvenient right-click menu item.Ken_Oh wrote:Yeah, for Wesband I went with sub-leveling and then changing the real unit level for every 5 sub-levels.
I guess there's no easy way to make it work. I'll just scrap the changing level thing, I guess. Oh well.
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Re: Making "level" behave differently
Okay, new question, but I figure I might as well use the same thread.
In the scenario, it's possible for units to buy items at a shop, then use them, drop them, etc. But I've got an entire inventory system crafted and written and working, but now I'm having trouble with the drop function. It's theoretically possible that an unlimited number of items could be dropped, so how do I keep track of the coordinates of all the dropped items? (so that the player could move back to that spot and re-pick them up) It seems that I would need to store the coordinates in a different variable every time, but there's no way to predict how many variables would be needed, and I can't reuse the same variable, cause that would overwrite it.
I'm not sure how much sense I'm making, but does anyone have an idea of how to do this? It seems to have been done in Wesband, but I can't make any sense of the super-complex mazes of code in there or find where it's done, so that doesn't help me.
I don't need the code written for me, just an explanation or suggestion of some reasonable way of accomplishing this. I'm at my wits' end.
In the scenario, it's possible for units to buy items at a shop, then use them, drop them, etc. But I've got an entire inventory system crafted and written and working, but now I'm having trouble with the drop function. It's theoretically possible that an unlimited number of items could be dropped, so how do I keep track of the coordinates of all the dropped items? (so that the player could move back to that spot and re-pick them up) It seems that I would need to store the coordinates in a different variable every time, but there's no way to predict how many variables would be needed, and I can't reuse the same variable, cause that would overwrite it.
I'm not sure how much sense I'm making, but does anyone have an idea of how to do this? It seems to have been done in Wesband, but I can't make any sense of the super-complex mazes of code in there or find where it's done, so that doesn't help me.
I don't need the code written for me, just an explanation or suggestion of some reasonable way of accomplishing this. I'm at my wits' end.
Re: New question: storing coordinates of dropped items
Now I'm reading this and I'm thinking "This would be so simple with Lua" Now I understand how Anonymissimus and Silene must have felt helping me in my WML thread.
Seriously, though, I think it could still be possible in WML. You have to consider your variable as an array. As you might already know, location_variable is already an array of sort: one that has only one entry. As such, you could as well call it with location_variable[0]. So what we want to do is add an entry at the end of the array (so we do not overwrite anything). we could envision something like that:
(Notice how we didn't do the new_entry thing + 1, since arrays in wml start at position 0, but length starts at 1)
Ok, so I checked something in the wiki, and actually, it could be much simpler:
I am not 100% sure how it would behave if you cleared an entry in the middle of the array, though: would all the entries move back one spot or not? Would length be reduced?
Seriously, though, I think it could still be possible in WML. You have to consider your variable as an array. As you might already know, location_variable is already an array of sort: one that has only one entry. As such, you could as well call it with location_variable[0]. So what we want to do is add an entry at the end of the array (so we do not overwrite anything). we could envision something like that:
Code: Select all
{VARIABLE my_array_new_entry_position $my_location_array.length}
{VARIABLE my_location_array[$my_array_new_entry_position] "my new value"}
Ok, so I checked something in the wiki, and actually, it could be much simpler:
Code: Select all
[set_variables]
name=my_location_array
mode=append
# I'm not 100% wether mode=merge would be more suitable
[value]
x=1
y=1
item="banana peel"
hey_lookit_im_a_key="I'm a value"
[/value]
[/set_variables]
Jazz is not dead, it just smells funny - Frank Zappa
Current projects: Internet meme Era, The Settlers of Wesnoth
Current projects: Internet meme Era, The Settlers of Wesnoth
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Re: New question: storing coordinates of dropped items
Hmm.... I'm intrigued. I've never dealt with arrays much before. I'll play with it a bit, and be back with another question shortly, I'm sure.
Thanks!
EDIT:
...One more question. (I'm still working on getting the dropped items to function properly, but I think I'm making progress. )
Unfortunately, I'm awful at the different filters' syntax. I really should be more experienced with them, since I use them so much, but I'm not.
Anyway, I need to store all units that are on side 1 and adjacent to the unit with id=Darth Vader. (just for the example )
I don't have the slightest clue how to do this, although I suspect it involves [filter_adjacent] and/or a little bit of [filter_location]...? Looking at the wiki pages about filters just confuse me more...
Any help is greatly appreciated.
EDIT2:
I figured it out on my own.
Thanks!
EDIT:
...One more question. (I'm still working on getting the dropped items to function properly, but I think I'm making progress. )
Unfortunately, I'm awful at the different filters' syntax. I really should be more experienced with them, since I use them so much, but I'm not.
Anyway, I need to store all units that are on side 1 and adjacent to the unit with id=Darth Vader. (just for the example )
I don't have the slightest clue how to do this, although I suspect it involves [filter_adjacent] and/or a little bit of [filter_location]...? Looking at the wiki pages about filters just confuse me more...
Any help is greatly appreciated.
EDIT2:
I figured it out on my own.
Re: Cpt. Wrathbow's WML questions
You do realize there is a sticky thread at the top of this forum explaining an easy way to manage sets of locations in WML?
Also, yes, clearing an explicit index of an array will remove that element from an array.
Dixie, I appreciate the fact that you're trying to be helpful, but saying misleading things about WML (like claiming filter_location doesn't work right) is not really helpful and it's actually annoying because you could very easily test these things in the test scenario rather than making these public speculations about how it might or might not behave.
I am glad that you are excited about Lua but that doesn't mean that we want WML to be seen as unusable or outdated. On the contrary, you need to understand how WML works before learning Lua since they often need to interract.
It is my goal that people will be able to use pure WML to comfortably program any Wesnoth scenario that doesn't require advanced programming techniques (when I say "advanced" I mean writing a custom AI or something equivalently complex).
Also, yes, clearing an explicit index of an array will remove that element from an array.
Dixie, I appreciate the fact that you're trying to be helpful, but saying misleading things about WML (like claiming filter_location doesn't work right) is not really helpful and it's actually annoying because you could very easily test these things in the test scenario rather than making these public speculations about how it might or might not behave.
I am glad that you are excited about Lua but that doesn't mean that we want WML to be seen as unusable or outdated. On the contrary, you need to understand how WML works before learning Lua since they often need to interract.
It is my goal that people will be able to use pure WML to comfortably program any Wesnoth scenario that doesn't require advanced programming techniques (when I say "advanced" I mean writing a custom AI or something equivalently complex).
http://www.wesnoth.org/wiki/User:Sapient... "Looks like your skills saved us again. Uh, well at least, they saved Soarin's apple pie."
Re: Cpt. Wrathbow's WML questions
Mea culpa, I guess I got a bit carried away I'll try to be more careful in the future.
The thing about filter/store locations is that I often encountered surprises when using them, but it probably stems from my assuming they work like their unit counterparts, which I think they don't exactly. You are right I should probably have tested it throughly and said "filter location works like this" instead of "filter location works funny". Sorry.
The thing about filter/store locations is that I often encountered surprises when using them, but it probably stems from my assuming they work like their unit counterparts, which I think they don't exactly. You are right I should probably have tested it throughly and said "filter location works like this" instead of "filter location works funny". Sorry.
Jazz is not dead, it just smells funny - Frank Zappa
Current projects: Internet meme Era, The Settlers of Wesnoth
Current projects: Internet meme Era, The Settlers of Wesnoth
- Captain_Wrathbow
- Posts: 1664
- Joined: June 30th, 2009, 2:03 pm
- Location: Guardia
Re: Cpt. Wrathbow's WML questions
New question. (I didn't really think it was worth it to make a new thread, so I'm just using this one)
RPG again. I want the friendly NPCs in a village to just sort of wander around in random directions. But I don't want them entering houses, or leaving the village. How would I do this? I've imagined it would involve storing a location, then setting it as the unit's goto location, or something like that. Is that right at all?
RPG again. I want the friendly NPCs in a village to just sort of wander around in random directions. But I don't want them entering houses, or leaving the village. How would I do this? I've imagined it would involve storing a location, then setting it as the unit's goto location, or something like that. Is that right at all?
- Pentarctagon
- Project Manager
- Posts: 5564
- Joined: March 22nd, 2009, 10:50 pm
- Location: Earth (occasionally)
Re: Cpt. Wrathbow's WML questions
what you could do is set their mp to 0, randomly generate 2 numbers for the x,y coordinates, then use the MOVE_UNIT macro to move the units to that location (you could check the location before moving them and add 1 to the x or y coordinate if it would be a village).
99 little bugs in the code, 99 little bugs
take one down, patch it around
-2,147,483,648 little bugs in the code
take one down, patch it around
-2,147,483,648 little bugs in the code