--- Log opened Wed Sep 26 00:00:48 2018 20180926 00:11:44-!- gfgtdf [~Daniel@x55b2a309.dyn.telefonica.de] has quit [Ping timeout: 252 seconds] 20180926 00:28:09<+wesdiscordbot> Quick but can't move 20180926 00:28:11<+wesdiscordbot> :thonk: 20180926 00:44:15<+wesdiscordbot> haha, the quick was so he'd have less HP 20180926 00:48:38<+wesdiscordbot> quick reduces HP? 20180926 00:49:05<+wesdiscordbot> yes by 5% 20180926 00:49:07<+wesdiscordbot> ooh 20180926 00:49:24<+wesdiscordbot> and slow increases HP 20180926 00:49:33<+wesdiscordbot> slow shmow 20180926 00:54:57-!- hk238 [~kvirc@unaffiliated/hk238] has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/] 20180926 01:05:40<+wesdiscordbot> @Inky it seems like the trolls will regenerate on turn 2 20180926 01:05:54<+wesdiscordbot> so maybe regenerate actually just can't happen on the first turn or something 20180926 01:06:39<+wesdiscordbot> oh that's weird, let me try it out 20180926 01:06:57<+wesdiscordbot> alternatively 20180926 01:07:10<+wesdiscordbot> maybe it's that they need to reigster having taken dmg for regenerate to work? 20180926 01:07:12<+wesdiscordbot> 🤔 20180926 01:08:01<+wesdiscordbot> nope 20180926 01:08:04<+wesdiscordbot> ooh that's a good hypothesis 20180926 01:08:07<+wesdiscordbot> oh 20180926 01:08:10<+wesdiscordbot> unfortuantely not :p 20180926 01:08:17<+wesdiscordbot> yeah it just works on turn 2 20180926 01:23:10<+wesdiscordbot> does this count as a bug? i mean, they should regenerate even if it's turn 1 right 20180926 01:32:57<+wesdiscordbot> 🤷 20180926 03:45:10<+wesdiscordbot> There is discussion about it: https://forums.wesnoth.org/viewtopic.php?t=48817 20180926 04:33:55< vn971> @Inky: I raised the same issue some time ago and was explained that it's not a bug as well. 20180926 04:49:12-!- wesdiscordbot [~wesdiscor@wesnoth/bot/discord-bridge] has quit [Remote host closed the connection] 20180926 04:49:21-!- wesdiscordbot [~wesdiscor@wesnoth/bot/discord-bridge] has joined #wesnoth-umc-dev 20180926 04:49:24-!- mode/#wesnoth-umc-dev [+v wesdiscordbot] by ChanServ 20180926 08:17:55-!- wesdiscordbot1 [~wesdiscor@wesnoth/bot/discord-bridge] has joined #wesnoth-umc-dev 20180926 08:17:58-!- mode/#wesnoth-umc-dev [+v wesdiscordbot1] by ChanServ 20180926 08:21:47-!- wesdiscordbot [~wesdiscor@wesnoth/bot/discord-bridge] has quit [Ping timeout: 252 seconds] 20180926 08:21:49-!- wesdiscordbot1 is now known as wesdiscordbot 20180926 10:56:37-!- hk238 [~kvirc@unaffiliated/hk238] has joined #wesnoth-umc-dev 20180926 11:33:31-!- zookeeper [~lmsnie@wesnoth/developer/zookeeper] has joined #wesnoth-umc-dev 20180926 12:42:47<+wesdiscordbot> oh, thanks for the link! wow, they even linked to my Tactics Puzzles addon 😄 20180926 17:37:16<+wesdiscordbot> @Inky The puzzles were a lot of fun 😃 20180926 19:05:32< hk238> hmm can you define abilities & everything in lua code or is it necessary to make WML files for them? 20180926 19:09:52< hk238> trying to modify creepwars seems a little complicated, it has many files and I've trouble figuring out where to start 20180926 19:10:16< hk238> also my WML abilities are non-existent so figuring out how to do WML stuff in lua seems a little challenging :d 20180926 19:11:14<+wesdiscordbot> lol 20180926 19:11:19<+wesdiscordbot> i have the opposite thing 20180926 19:11:38<+wesdiscordbot> i'm pretty okay with WML but my lua skills are uuuh 20180926 19:12:09< hk238> :D 20180926 19:12:12< hk238> http://lua-users.org/wiki/ModuleDefinition 20180926 19:12:19< hk238> does this type of module definition work in wesnoth? I could test it I guess 20180926 19:12:29< hk238> I got this generic functions file which I'd like to export in a structured manner 20180926 19:13:50<+wesdiscordbot> Yes, it works in Wesnoth. You just need to use wesnoth.require instead of plain Lua require. 20180926 19:13:55<+wesdiscordbot> https://wiki.wesnoth.org/LuaWML/Files#wesnoth.require 20180926 19:14:28< hk238> oh I thought wesnoth.require was for some internal standard wesnoth library thing 20180926 19:15:45<+wesdiscordbot> BTW, I recently found that for functional programming there is a Lua library called Underscore.lua, inspired by underscore.js for JavaScript: http://mirven.github.io/underscore.lua/ 20180926 19:16:53< hk238> hmm I'm not familiar with underscore from javascript nor lua, but is that usable inside wesnoth then? :o 20180926 19:17:48<+wesdiscordbot> Yes. The add-on would need to ship its own copy of the module ( https://github.com/mirven/underscore.lua/blob/master/lib/underscore.lua ), then load it with wesnoth.require. 20180926 19:18:42<+wesdiscordbot> (Using the underscore for the table name would be a bad idea, though, because Wesnoth convention is to use it for localization.) 20180926 19:19:51< hk238> right :d 20180926 19:20:28< hk238> I guess I could look into that, for starters I guess I need to figure out how to use wesnoth require for these generic functions.. I suppose it would be a good idea to try and modularize content in anycase 20180926 19:21:16< hk238> It's complicated at least for me to gain oversight from sort of dispersed functionality that's not under some straightforward sequential process 20180926 19:23:03< hk238> I suppose that is inevitable when interfacing with wesnoth via events though 20180926 19:29:05< hk238> hmm so do I have to write to the generic functions, which I want to modularize, a return statement that returns the library.. as if the "require" with the argument "filename" was a function call and the contents were the file's contents? 20180926 19:30:06<+wesdiscordbot> Yes, exactly. wesnoth.require runs the file you specify and returns its return value. 20180926 19:30:20< hk238> okay I guess I Get it now thanks 20180926 19:30:20< hk238> :D 20180926 19:30:36<+wesdiscordbot> (It also tracks that you don't require the same file twice. If you do, it returns the same object as the last time without rerunning the file.) 20180926 19:38:47< vn971> > hmm can you define abilities -- if you want to add abilities on-the-fly, you can surely do it from Lua. 20180926 19:39:04< vn971> hk238: there's a couple of examples for that if you're unterested. 20180926 19:39:15< hk238> sure 20180926 19:39:21< hk238> I'm interested :D 20180926 19:39:26< vn971> 1 sec 20180926 19:40:42< vn971> one example (creepwars): https://github.com/vgaming/CreepWars/blob/master/Creep_War_Dev/lua/random_creep_generator.lua#L61 20180926 19:42:00< vn971> or here you can even see ability being updated (technically, removed and added back): https://github.com/vgaming/CreepWars/blob/master/Creep_War_Dev/lua/shop/leader_ability.lua#L38 20180926 19:42:56< hk238> by the way why in the beginning of files there are statements like "local creepwars = creepwars" ? 20180926 19:44:25< hk238> to make sense out of this, since I've trouble dealing with these.. I was thinking about making a file called "core.lua" and I would attach all the event handlers to that file and moduralize the files which contain the definitions 20180926 19:44:31< hk238> sort of like a header file 20180926 19:44:35< hk238> would that make sense? 20180926 19:44:52< vn971> hk238: a very subtle difference. Accessing local variables is a bit cheaper in wesnoth. If you write a line like this, further lines will access this local "creepwars", not the global one. 20180926 19:46:09< vn971> hk238: if you want simplicity and you don't use a smart-y IDE with "global variables" highlighting -- then just remove said lines. It'll work just fine. Chances are nobody will ever notice any diffirence. 20180926 19:46:10< hk238> if I understand correctly for an example 'leader_limbo.lua' contains 3 on event functions, and then it is modifying creepwar object. But just looking at this file I don't know where it's associated to an event? :o 20180926 19:46:31< hk238> I'm just using a text editor though :D 20180926 19:47:00< hk238> it does have syntax highlighting though 20180926 19:48:07< vn971> hk238: it probably just does the syntax highlight thing, but does not analyze source code program flow itself, so it doesn't differentiate between local variables and global variables. 20180926 19:48:25< hk238> that's probably the case :D 20180926 19:49:12< vn971> hk238: so what leader_limbo.lua does is it indeed only registers functions to be used elsewhere.. Technically you could probably even move the code just to the caller file. 20180926 19:49:37< vn971> actually I have no idea why it's not the case already. 20180926 19:49:49< vn971> I think there was something more complex in the past, and I forgot to re-structure. 20180926 19:49:56< hk238> right so would it make sense to write the functions as a lua module, then use wesnoth.require leader_limbo ? 20180926 19:50:29< hk238> I mean because I have trouble following this since it's quite a complex addon and would want to simplify it to gain some oversight, especially since I'm not very well aware of all the wesnoth / wml related stuff 20180926 19:50:52< vn971> and "event_die.lua" file is complex as well. The whole file is being called for each "die" event. I didn't know "on_event.lua" helper from core wesnoth at the time. If I knew it, I'd use that instead. It's way cooler. 20180926 19:51:38< hk238> right.. so where's the event handler that associates event_die.lua? is it in some configuration file? :o 20180926 19:51:40< vn971> > then use wesnoth.require leader_limbo ? -- if you use "wesnoth.require", you would have to force people download your add-on before using. Which might actually not be a bad thing, but still. 20180926 19:52:07< hk238> it must be the events cfg file.. 20180926 19:52:08< hk238> D 20180926 19:52:28< hk238> right :o 20180926 19:52:36< vn971> hk238: event_die.lua is mentioned in WML. Specifically it's bound to "die" event, defined in lua_events.cfg 20180926 19:52:41< hk238> hmm but if I want to do this modularization it requires using the require functioN? 20180926 19:53:09< hk238> hmm 20180926 19:53:17< vn971> hk238: if I'd be smart or of you really want to, I can move most of the code to a simple die_event.lua file 20180926 19:54:07< hk238> I think this is a pretty good structure to have the event handlers in a separate file.. I just hadn't noticed that 20180926 19:54:07< hk238> :D 20180926 19:54:14< hk238> I guess because I was busy looking at the lua files 20180926 19:54:24< vn971> hk238: depends on what kind of mudularization you want. But if you don't want a global table "creepwars" and would prefer to access properties of specific files -- you'll be forced to use something like "require" indeed. And require to download add-on. 20180926 19:54:59< hk238> oh yeah it's because if using global creepwars it causes the problem that you can't see where stuff is defined 20180926 19:55:13< hk238> but if you use require then you can see that oh this is defined there 20180926 19:55:35< hk238> I mean probably wouldn't need to try and simplify the addon if I was better with this stuff 20180926 19:55:54<+wesdiscordbot> You can also use modules and simply merge everything to one line. 20180926 19:56:14<+wesdiscordbot> Define table "creepwars" and add functions to it. Later on in the same file use that table. 20180926 19:56:26<+wesdiscordbot> *one file, not one line 20180926 19:56:53< hk238> right but I think it's not simpler when everything is in one file, it does make looking into the file itself more complex 20180926 19:56:57< vn971> hk238: today I'd try to write it simpler than I had in November 2017.) Though the overall idea is the same. Just the tastes and Lua API knowledge changed. This file was one of the very first I've written for CreepWars.)) 20180926 19:57:10< hk238> I kind of the like the C++ style headerfiles 20180926 19:57:55< hk238> vn971 I feel that way about everything I've done too, but it's also that sometimes juts getting stuff done gets priority over doing things the best possible way considering long-run optimization 20180926 19:58:10< hk238> I mean usually it would be better to be far-sighted, it's laziness 20180926 19:58:19< hk238> well maybe not in your case 20180926 19:58:43< vn971> hk238: > you can't see where stuff is defined -- that may indeed be a problem. Personally, I just use "find text across project" function of my IDE which shows where stuff is called. But without such quick "search" function, it'd be painful. Something that I probably have to keep in mind when developing add-ons BTW, since I'd like them to be maintainable by other people as well. 20180926 19:58:45< hk238> so the events file could technically be made into a lua file using helper lua? 20180926 19:59:15< hk238> oh yeah vn971 that's exactly the issue I feel 20180926 20:01:01< vn971> hk238: yes, if you get to know the magic/power of "on_event" functionality, you can easily define events in Lua itself. No WML needed. 20180926 20:01:01< hk238> but the structure itself probably wouldn't simplify much since all the events are quite neatly defined in lua_events.cfg? 20180926 20:01:01< vn971> Or better to say, you need WML to load file(s) in "preload" event, after which the file(s) can register everything else you might want. 20180926 20:01:18< hk238> hmm right 20180926 20:01:58< hk238> to make an inventory system into creepwars seems quite difficult :D 20180926 20:02:08< hk238> but I think I'll try and do something like that 20180926 20:03:51< vn971> > to make an inventory system into creepwars seems quite difficult :D 20180926 20:03:51< vn971> You'll have to dig into the (pretty big!) "shop_menu.lua". And optionally, if stuff will start working, also "leader_ability.lua" so that people know which upgrade was bought by which leader. 20180926 20:04:22< hk238> yeah I've tried looking into those :D 20180926 20:05:57< hk238> I also got this thought that could define the items in a separate file, like items, which would just have data of certain type, and then the shop functions would use the data from there so currently I think they're defined as part of the shop system? 20180926 20:06:01< vn971> hk238: yes, all "preload" events are probably as easy as you can get already. All non-preload events I tend to define in Lua itself nowadays -- feels simpler that way. Also the "leader_limbo" code you mentioned should just be moved to the files where it's used -- no reason to add complexity and split across files. 20180926 20:06:39< hk238> btw I was also thinking about making these leader abilities which would boost the creeps like.. heal, resistance bonus, leadership, and so that they'd have 2-3 hex range instead of the normal adjacent 20180926 20:06:43< vn971> hk238: you mean separate "code" from "configuration/values"? Something like that could be possible, but I chose to mix everithing in one file. 20180926 20:07:41< hk238> yeah also separate configuration values file I guess.. but it's not like it's necessary, rather just.. it's hard to grasp a complicated project from the outside without trying to make some structure that gives oversight 20180926 20:08:07< vn971> hk238: feel free to try this all out:) Personally, as you know, I'm really scared of complexity, so I prefer to have as **less** functionality as possible while still posing game challenge :D 20180926 20:08:16< hk238> it's also that I like working from a datastructure type of perspective 20180926 20:08:49< hk238> so like.. I think about this item system. Well what do I want them items to do? What are they supposed to be like. Then I just write them as a plain data, like this object oriented style of having stuff with properties 20180926 20:08:59< hk238> once the data, or the items, are done, then figure out how to implement and use them 20180926 20:09:04<+wesdiscordbot> yet another random question 20180926 20:09:23<+wesdiscordbot> can you work with unit id's as thrings without using lua? 20180926 20:09:41< hk238> as a byproduct the stuff ends up in a separate list which is neat 20180926 20:09:49< vn971> in the 528 line of shop_menu.lua you'll see the main loop of the shop. If you want to hack in -- just add another entry and another "func" that will be called -- with the function itself defined in any of your separate files if you want. 20180926 20:10:21< hk238> I'd like to try something like that at least :D 20180926 20:10:46< vn971> hk238: so basically if you want to avoid it, you can work in your own files and only expose the result -- a function to be called when I press "magical rings" entry in Shop. 20180926 20:11:25< vn971> @BarsukEughen what is a "thring"? 20180926 20:11:34< hk238> thring? :D 20180926 20:11:39<+wesdiscordbot> :D 20180926 20:11:46< hk238> oh :d 20180926 20:11:47< vn971> string? 20180926 20:11:48<+wesdiscordbot> i totally forgot the proper name 20180926 20:11:52<+wesdiscordbot> strings, yes 20180926 20:12:03<+wesdiscordbot> thrings XD 20180926 20:12:08< vn971> ah OK. I don't think WML has any neat functions for string manipulation. 20180926 20:12:27<+wesdiscordbot> oh well 20180926 20:12:38< vn971> wait for other more WML-competent devs to answer though. I may just lack knowledge of appropriate WML stuff. 20180926 20:14:04<+wesdiscordbot> you can operate on strings using WFL 20180926 20:14:06< vn971> (In fact I explicitly try to understand as few of WML as I can. Which is sad of course, and a sad thing to notice by me. But still, a true statement.) 20180926 20:14:09<+wesdiscordbot> https://wiki.wesnoth.org/Wesnoth_Formula_Language#Strings 20180926 20:15:32<+wesdiscordbot> looks pretty good 20180926 20:19:22< hk238> when making an items list, would it be better to arrange them by a numerically indexed array, or a table with names of the items? 20180926 20:20:20<+wesdiscordbot> Depends on the planned access patterns. 20180926 20:20:35<+wesdiscordbot> Need to access an item by name? Use a table with names as keys. 20180926 20:20:37< hk238> yeah I was wondering if there was a reason to think one was more convenient than the other 20180926 20:20:58<+wesdiscordbot> Only ever need to loop over all items? Use an array with numeric indices. 20180926 20:21:21< vn971> hk238: whichever is convenient - so basically feel free to use arbitrary names (no indices) when you want. 20180926 20:21:25< hk238> https://pastebin.com/YyByh9vy 20180926 20:21:32< hk238> here's an example of what I was thinking about 20180926 20:21:47< vn971> hk238: the only thing you'll have to worry about is iteration order. Your code has to be agnostic to iteration order. Otherwise you'll get bad OOS. 20180926 20:22:09< vn971> hk238: if you just want to show shop entries, you can use a table. 20180926 20:22:11< hk238> right so if it's not indexed by numbers, they can't be chosen randomly either? if that was necessary :d 20180926 20:22:30< vn971> hk238: though then again note that you'd probably want your shop entries to always be sorted in a particular order. 20180926 20:22:31< hk238> unless you make a map that counts as an ordering of the table :d 20180926 20:22:42< hk238> right that too 20180926 20:22:59< hk238> so I could replace the statement ["ring_of_the_void"] with [1] instead? 20180926 20:24:33< hk238> hmm it's probably better to use numeric indices so you can filter this table more easily and pick random items.. could also write a function that finds an item with a given name from a numerically indexed array 20180926 20:24:39< vn971> hk238: I'd try to start with something like this, and see how far you can go with that: 20180926 20:24:39< vn971> my_special_rings = { 20180926 20:24:39< vn971> {name="the best ring", add_mp=1, forest_mp=1}, 20180926 20:24:39< vn971> {name="another ring", ...} 20180926 20:24:39< vn971> } 20180926 20:25:00< hk238> yeah I wrote that kind of thing just in the pastebin link 20180926 20:25:13< hk238> could add a section for the movement effects 20180926 20:25:33< vn971> > could also write a function that finds an item with a given name from a numerically indexed array -- well if you want to really have this specifically, I'd go for table (not array). 20180926 20:25:34< hk238> perhaps it would be better to structure it so, that if it has no effect on that particular thing, statement referring to it could be omitted? 20180926 20:25:52< vn971> for iteration, you can use a helper that pre-sorts keys and iterates over them in a strict manner. 20180926 20:26:30< hk238> like for an example I wrote to the above that piercing = 0, maybe it would be better to omit those statements and just have "arcane = 50" in this case? 20180926 20:26:37< vn971> table = {like ring_of_the_void = {}, another_ring = {}} 20180926 20:26:43< vn971> for k, v in ordered_pairs(table) do 20180926 20:27:07< vn971> hk238: depends on your code. 20180926 20:27:15< vn971> IDK if piercing=0 makes sense or not. 20180926 20:27:37< hk238> yeah I don't have the code yet I was planning to first make some example items, then figure out how to implement them 20180926 20:27:37< hk238> :D 20180926 20:29:52< vn971> hk238: makes sence actually. Though for my code, I decide to just have "effect_function=...", where "effect_function" is a function that can do arbitrary stuff with a unit. Add objects, heal -- basically anything. In practice it gives [object]-s only though. 20180926 20:30:21< vn971> hk238: but writing the description should help **a lot** for deciding what you actually want balance-wise. 20180926 20:30:35< vn971> could even be TXT file - not necessary Lua. (To my tastes.) 20180926 20:32:08< hk238> right that reminds me that items should have a description :D 20180926 20:34:42< hk238> also having this format should make it straightforward to define new items 20180926 20:34:55< hk238> but this seems pretty difficult to do anyway :D 20180926 20:35:13< vn971> hk238: probably because it probably is. :D 20180926 20:39:14< hk238> https://pastebin.com/Q6yPq14T <-- here's another example almost the same as previous.. so basically I'd write this as items.lua then use wesnoth.require in the shop wml, and add items for sale there, makes sense, no? :D 20180926 20:39:32< hk238> and items.lua would contain just a list of these items 20180926 20:41:59< vn971> hk238: yeah could work. Only I see no need for "items" if there are only "rings". 20180926 20:42:17< hk238> surely there would be more types of items eventually 20180926 20:42:23< hk238> just gotta start with something 20180926 20:42:39< hk238> creating content is pretty easy ,but making the system for this is hard :D 20180926 20:42:40< vn971> could just be a "one-liner" of 20180926 20:42:40< vn971> return { 20180926 20:42:40< vn971> [1] = {....}, 20180926 20:42:40< vn971> [2] = {....}, 20180926 20:42:40< vn971> } :D 20180926 20:43:01< hk238> hmm that makes sense 20180926 20:43:04< vn971> hk238: true, true 20180926 20:45:35< hk238> so I guess items need to have some sort of id when they're generated / bought 20180926 20:45:49< hk238> and effects caused by the items need to be associated with the id so you can remove the effects on unequip 20180926 20:46:21< hk238> some random number basically 20180926 20:54:17< hk238> hmm if abilities can be defined in lua then I should also make an exportable ability module I guess :d 20180926 21:14:38< hk238> hmm does WML allow an effect that increases hitpoints geometrically and is persistent? Like +20% hp 20180926 21:14:57< hk238> probably need to make an effect that is updated though? 20180926 21:19:31< hk238> are the WML effects such by the way that they memorize the units original values like.. if you change the movement cost on forests to 1, and then remove that effect, the original movement cost remains? 20180926 21:20:45< hk238> I mean is it like an effect that's added on top of the unit rather than modifying the unit itself? 20180926 21:22:53<+wesdiscordbot> Isnt it like that with trait quick? Im not quite sure. 20180926 21:23:23-!- zookeeper [~lmsnie@wesnoth/developer/zookeeper] has quit [Ping timeout: 245 seconds] 20180926 21:39:02< hk238> :d 20180926 21:40:48<+wesdiscordbot> Was it that stupid? 😒 20180926 21:40:57< hk238> no I don't know how quick trait is defined :D 20180926 21:44:03< hk238> ah this is tedious and I'm having trouble keeping myself at doing something :D 20180926 21:45:30<+wesdiscordbot> I oftem have the same trobule. 😛 20180926 21:45:54<+wesdiscordbot> [effect] apply_to=hitpoints increase_total=-5% [/effect] 20180926 21:46:01< vn971> > some random number basically I think you can just use the "id" you have already. 20180926 21:47:13< vn971> > I mean is it like an effect that's added on top of the unit rather than modifying the unit itself? -- yeah I think so. 20180926 21:48:35<+wesdiscordbot> Im going to check this in game by creating unit with +100 feeding and with quick trait. 20180926 21:52:22< vn971> @Hejnewar: the order of object application matters, if that's what you want to test. 20180926 21:52:40< vn971> if "quick" is given first, all the subsequent +1HP will add 1 HP exactly. 20180926 21:53:47<+wesdiscordbot> So there is no point it testing. Feeding comes after quick i think. 20180926 21:54:07< vn971> if you however apply object -5% first, then add +100 in a single object (no roundings), then remove the -5% object -- your +100HP will even become +105% (or around that). 20180926 21:54:29< hk238> hmm so if you apply two +20% objects, it's 144% rather than 140%? 20180926 21:54:54< vn971> @Hejnewar yes, it comes after, so it's always +1. Also, Necrophag cannot really have "quick" trait (as well as any trait except obligatory at all). 20180926 21:55:11< vn971> hk238: yes, I think so. Except for rounding. 20180926 21:55:36< vn971> so if unit had 1HP, then a thousand of +20% objects will do nothing I think. 20180926 21:55:36<+wesdiscordbot> It is not hard to make him have normal traits tho. 20180926 21:55:46< vn971> @Hejnewar: yeah true. 20180926 21:56:34< vn971> roundings aside, "%" objects are multiplicative I think yeah. 20180926 21:57:07< vn971> Could be wrong though, I'm only 98% confident in that. 20180926 22:34:20-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180926 22:34:26-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180926 23:39:37-!- gfgtdf [~Daniel@x4dba1746.dyn.telefonica.de] has joined #wesnoth-umc-dev --- Log closed Thu Sep 27 00:00:11 2018