Scripting and other questions

This forum is for the Lua scriptable clone of DM/CSB called Dungeon Strikes Back by Sophia. Use DSB to build your own highly customised games.

Moderator: Sophia

Forum rules
Please read the Forum rules and policies before posting.
Post Reply
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Scripting and other questions

Post by lenochware »

I proudly present my first script - wallgrate which bites you!

Code: Select all

function obj.mywallgrate:on_click(self, id, what, x, y)
     ppos = dsb_get_leader()
     who = dsb_ppos_char(ppos)
     do_damage(ppos, who, HEALTH, 2)
     dsb_write(system_color, "SOMETHING BITES YOU")
end
Now I am trying create drinkable puddle, but my puddle does not respond to on_click.

Code: Select all

obj.puddle.clickable = true
function obj.puddle:on_click(self, id, what, x, y)
  dsb_write(system_color, "DRINK")
end
...does nothing...

But on_click on monster works!

I also struggled with graphics. I tried change icon for automap, but it seems that function dsb_get_bitmap() does not work if it is in objects.lua?
If I move code to Automap.lua, it starts working.
I've got message "automap.icon requires bitmap" and in log.txt "dsb_get_bitmap can only be used in initialization files". Strange.
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

I think the clickable puddle doesn't work because it's "flat," not "upright." These are two different types of flooritem in DSB, and I don't think I ever made flat flooritems clickable.
I'll dig around in the code and see if there is anything I can sort out.

Anyway, about the graphics, the issue is simply that all graphics must already be loaded by the time objects.lua is parsed, except for importable archetypes which are assumed to be self-contained.
If you want to load some of your own graphics, you can create your own startup.lua (or a graphics.lua or the like) of course.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Sophia wrote:I don't think I ever made flat flooritems clickable.
Well, it could add some posibilities (at least I think so), if user could interact with objects on the floor or maybe even ceiling. Is there some workaround? For example I can add some thing like apple and give it graphics of puddle - but I don't know how prevent it to be picked.
Sophia wrote:If you want to load some of your own graphics, you can create your own startup.lua (or a graphics.lua or the like) of course.
I see, thanks for the info. I was just little bit confused.

By the way - I supposed that if I create things like crack or fountain in ESB and put something into their Contents box, in game if I click on crack or fountain, I will get that thing. I did it already with scripting (which seems really good and flexible),
but I think that people will expect this behaviour by default, if they will see contents box in properties. It's not important, just suggestion.

Also is there posibility set default dungeon location - maybe in ini file?
I am doing small changes into scripts and everytime I am starting DSB, and testing it. So my goal is do this process as fast as possible. I want avoid selecting dungeon at each start. Maybe also some debug_mode parameter which skip starting animation would be nice. But it is also not important, I am just giving feedback. :)
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

lenochware wrote:Well, it could add some posibilities (at least I think so), if user could interact with objects on the floor or maybe even ceiling. Is there some workaround?
Yes. You can make it an upright flooritem (i.e., a "FLOORUPRIGHT") which can be made clickable. They have slightly different behavior in the renderer so it is not 100% ideal but it should hopefully work.
lenochware wrote:I supposed that if I create things like crack or fountain in ESB and put something into their Contents box, in game if I click on crack or fountain, I will get that thing.
If you set an exvar called release to true, it will do what you expect. This is documented... somewhere. But it is probably not all that clear.
lenochware wrote:Also is there posibility set default dungeon location - maybe in ini file?
Yes. In the ini, under [Main], set "Dungeon=value", for example, to start in C:\dsb\mydungeon, set "Dungeon=mydungeon"
lenochware wrote:Maybe also some debug_mode parameter which skip starting animation would be nice. But it is also not important, I am just giving feedback. :)
This is doable too. If you create a function called sys_game_intro and make it return true, the DSB starting animation won't be displayed. You can also override the front_door function to do nothing and you will enter the dungeon immediately.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Yes it works! I did my puddle from a doorframe (when I just changed type of the puddle to FLOORUPRIGHT, object was not visible).

Code: Select all

obj.mypuddle = clone_arch(obj.doorframe, {
	front=gfx.puddle_front[1],
	front_med=gfx.puddle_front[2],
	front_far=gfx.puddle_front[3],
	side=gfx.puddle_side[1],
	side_med=gfx.puddle_side[2],
	side_far=gfx.puddle_side[3],
	same_square=gfx.puddle_front[1],
} )
Your other tips works perfectly too, thank you! Now everything is much easier.

I started research on my project of advanced shields :) and I must say that it is really fun play with the scripts.
I created variable party={} in startup.lua, because I was not sure if something like this already is here. In monster_attack() I am calling party.on_damage() where my shield code comes.

Code: Select all

function party:on_damage(monster_id, char, t_damage, c_damage)
  local item = dsb_fetch(CHARACTER, char, INV_L_HAND, 0)
  if (item) then
			local item_arch = dsb_find_arch(item)
			if (item_arch.class == "SHIELD") then
        dsb_attack_text("BLOCKED!")
        return 0
    end
  end
  
  return c_damage
end
Seems working fine, just one small detail: I don't know if it is possible put newline into dsb_attack_text(). I tried / and \n but it's not working.
On the other side it is question if longer texts makes sense here because of short time interval when text is on the screen.

Is there some description or example of dsb_fetch function? It seems it has powerful undocumented inventory reading features :) I found example with INV_L_HAND in base code.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Two more questions. :)
Is it possible to set puddle graphic in ESB (I mean puddle icon on the ESB "map"). Because now it has icon of doorframe. I search for esb_icon but found nothing.
Is shield in left hand doing something in original DM? I am still not sure about it...
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

lenochware wrote:Seems working fine, just one small detail: I don't know if it is possible put newline into dsb_attack_text(). I tried / and \n but it's not working.
On the other side it is question if longer texts makes sense here because of short time interval when text is on the screen.
Yes, the current form is one line only. You could change this by hacking around in the code that renders it, if you wanted.
lenochware wrote:Is there some description or example of dsb_fetch function? It seems it has powerful undocumented inventory reading features :) I found example with INV_L_HAND in base code.
The wiki is usually a good reference: http://dmwiki.atomas.com/wiki/DSB/Exposed_functions
The part about using special locations is mentioned in the readme, I think. You can get a list of inventory locations looking at base/inventory_info.lua.
And yes, the documentation is a bit scattered, which isn't the best.
lenochware wrote:Is it possible to set puddle graphic in ESB (I mean puddle icon on the ESB "map"). Because now it has icon of doorframe. I search for esb_icon but found nothing.
It might be better to copy-paste the puddle's archetype and create it from scratch rather than clone a doorframe, which probably has a lot of overhead that you won't want. Unlike RTC, you can define objects from scratch in DSB if you prefer; the cloning is just there for convenience.

The icon used in ESB is handled by esb_drawinfo, which is set to a number in a global list of icons. It's currently not easy to add custom icons to ESB. This is something I've been contemplating adding for a while, but other stuff has always seemed more important. The puddle graphic is 12, so if you just want a puddle that looks like a puddle, esb_drawinfo = 12 in its arch will do exactly that.

You can find all this in editor/editor.lua but the code is a little hard to make sense of.
lenochware wrote:Is shield in left hand doing something in original DM? I am still not sure about it...
Yes. I investigated this while making DSB.
My research is here: http://www.dungeon-master.com/forum/vie ... 46&t=28401
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Wow, it seems that everything what I am asking is possible - I am impressed! :) Thanks for your very useful answers.
Just for sure: I am storing amount of damage taken by shield. I suppose that best place to store this is an exvar... (I investigated that exvars are saved itno savegame automatically)
function init_shield(arch, id, lev, x, y, dir)
exvar[id] = { shield_health = 100 }
end

obj.myshield.on_spawn = init_shield
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

Yes, that's the best place. :)
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Hello, I'm back :) I am still coding my little dungeon and I have some questions.

1) I am lobbing for on_click on everything - even for floorflats and doors (I am sorry, if it already exists)
2) Can I detect if player "go into" the monster? I have found sys_wall_hit() activated when party hit the wall
but I didn't find any "on_party_move_failed" or so... (It could be used for pushing weaker monsters away for example...)
3) I have idea of changing way how right mouse button works. I would keep original mode, but add posibility enable "new mode" in scripting. In new mode, rmb would switch to inventory only if player click in upper "portrait" area - if he click in dungeon view, it would just call on_click() with mouse_button parameter.
It would add plenty of posibilities to the UI - in my opinion. For example: lmb on monster would "steal" something, rmb "look" on the monster. Also "combine" in inventory etc... What do you think about it?
4) Is there some event when player hit the wall with weapon? I have on my mind something like bashing doors - destroying walls with "crack", riping tapestry and revealing button etc.
5) Some event on_walk_over() for each thing would be nice, I think. It would trigger when monster or party walk over something... I know that it is possible to do now, but with the event it would be little bit easier.
6) I am lobbing for h_character_take_damage and h_character_inflict_damage - I created h_character_take_damage for my shield code (but I must copy part of basecode)
7) Is there event for putting something/getting it from the floor? It could be used for different sounds on different types of things...
8 ) What about monsters fighting each other? It seems difficult... I experimented with controling monsters for the beginning (by dsb_ai()) but it seems not working to me. Can I stop monster somehow? (I know about monster blocker, but some scripting solution would be better for me) Can I command it to go at some place?
9) Is bitmap stretching working?
When I tried do dsb_bitmap_draw(dbmp, outbmp, 0, 0, width, height, width, height, false), result didn't look ok - but maybe I am doing something wrong. Also I had problems with overwriting scroll_font. (I was trying add exclamation mark - my sentence LOWER LEVELS ARE FULL OF DEAD BODIES! is not frightening enough without it ;)
10) Floorupright which always will draw over things on the floor? (I am trying do some kind of high grass, which hide items) I am not sure how to do that. Some render_hack?

By the way: Is there section where I can download all levels or scripts created for DSB? Or I must search through forums? It is good (in my opinion) if people can see what was done and dungeon designers can learn from it. I heard some rumors about DM2-like automap....

Oh, and it is possible have image "under" whole dungeon view, which will be seen if there would be "transparent" roof or wall (on the borders of the level for example).
I created sky - wallset without "roof" - but it is not probably perfect...
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

lenochware wrote:I am lobbing for on_click on everything - even for floorflats and doors (I am sorry, if it already exists)
No, it doesn't already exist. The good news is that you can at least hack something for the time being with a completely transparent floorupright that you draw on top of whatever else, which should work wherever. I'll keep the request in mind, though.
lenochware wrote:Can I detect if player "go into" the monster? I have found sys_wall_hit() activated when party hit the wall
I'll add a sys_inst_hit that gets triggered when the party bumps into something.
lenochware wrote:I have idea of changing way how right mouse button works. I would keep original mode, but add posibility enable "new mode" in scripting. In new mode, rmb would switch to inventory only if player click in upper "portrait" area - if he click in dungeon view, it would just call on_click() with mouse_button parameter.
It would add plenty of posibilities to the UI - in my opinion. For example: lmb on monster would "steal" something, rmb "look" on the monster. Also "combine" in inventory etc... What do you think about it?
This would require a fairly significant reworking of the way the core engine handles mouse events. I'll investigate, but don't get your hopes up. :wink:
lenochware wrote:Is there some event when player hit the wall with weapon? I have on my mind something like bashing doors - destroying walls with "crack", riping tapestry and revealing button etc.
Each weapon can have an on_empty_square_attack(arch, id, ppos, who, m, lev, x, y, dir) event.
lenochware wrote:Some event on_walk_over() for each thing would be nice, I think. It would trigger when monster or party walk over something... I know that it is possible to do now, but with the event it would be little bit easier.
I'm not sure what this would accomplish that isn't already pretty easily doable, to be honest.
lenochware wrote:I am lobbing for h_character_take_damage and h_character_inflict_damage - I created h_character_take_damage for my shield code (but I must copy part of basecode)
Yes, I can add h_char_take_damage(ppos, who, dmg_type, amount, passive) fairly easily, so consider that done.
A hook for inflicting damage is a little harder because I'm not sure what exactly should count. Just melee? Fireballs thrown by that character? A door slammed by that character?
Other designers may disagree with whatever definition we choose.
lenochware wrote:Is there event for putting something/getting it from the floor? It could be used for different sounds on different types of things...
Well, on_click is defined for items, so you can use that for picking up, and there is an on_drop(arch, id) event that should handle putting something on the floor. (Or in an alcove or whatever)
lenochware wrote:What about monsters fighting each other? It seems difficult...
Ian_scho did some work with this, but you're right, it's not easy.
I don't know what you mean by stop a monster, but you can tell monsters where to go by using add_monster_target(id, ttl, x, y)
The id has to be the group's boss or it won't work properly, of course.
lenochware wrote:When I tried do dsb_bitmap_draw(dbmp, outbmp, 0, 0, width, height, width, height, false), result didn't look ok - but maybe I am doing something wrong.
The problem is that dsb_bitmap_draw can't scale bitmaps. The full parameter list is dsb_bitmap_draw(src_bmp, dest_bmp, source_x, source_y, dest_x, dest_y, width, height, flip) and is used for grabbing a small piece of a bitmap instead of drawing the whole thing. The one you want for scaling is dsb_bitmap_blit, which is somewhat more restrictive on the input it takes, but should probably still work for you.
lenochware wrote:Also I had problems with overwriting scroll_font.
You should be able to just replace gfx.scroll_font and go. If this doesn't work, I'll need more explanation, and I'd also like to see what bitmap you're trying to use.
lenochware wrote:Floorupright which always will draw over things on the floor? (I am trying do some kind of high grass, which hide items) I am not sure how to do that. Some render_hack?
I'll investigate how difficult this would be to add. Probably not very.
lenochware wrote:By the way: Is there section where I can download all levels or scripts created for DSB? Or I must search through forums?
It isn't organized. Of course, if you make a "DSB resources" thread after you find stuff, I'll be happy to sticky it. :mrgreen:
lenochware wrote:Oh, and it is possible have image "under" whole dungeon view, which will be seen if there would be "transparent" roof or wall (on the borders of the level for example).
I created sky - wallset without "roof" - but it is not probably perfect...
I have no idea what you're asking. Sorry.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

- Right mouse button on_click: I can live without it. I just thought that it could be easy add this feature and maybe could be interesting
- sys_inst_hit, on_empty_square_attack - thanks!
- on_walk_over(): Well, I have idea of some bomb which will explode when monster step on it - but I suppose there is some h_monster_move() similar to h_party_move() which solve this - although I cannot find it now....
- h_char_take_damage() - thank you! I am also returning resulting damage from this function so I can defend attack with the shield (set damage to 0)
- Hook for inflicting damage : As for me, I was thinking about melee attack. I could use it for damaging weapons. I don't need it really because I already did damaging weapons (by setting on_melee_damage_monster() event for each weapon) But I think that attack is important "global" game event such as on_party_move so it should be covered with some hook/event handler - at least in my opinion.
on_drop() - Oh, I missed that one, sorry. dsb_bitmap_blit() works, thanks!
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

"I have no idea what you're asking": I am speaking about what is called "skybox" in 3d games or maybe could it be called "underlay". Game engine would draw background image with size of dungeon window at first. Next engine draw dungeon, but didn't draw roof (or maybe other "transparent" areas too), so background image (with sky) would be visible instead of roof. But if it is not easy, forget it - I kinda like my sky. :)

I have some kind of "garden" in my level: here is example: [url]http:lenochware.ic.cz/example.zip[/url]

I also demonstrate my problem with scroll-font in the example. Here is basefont image, edited in various image editors. If it is used, game crash ocassionally - but even if it don't crash - scroll in game is empty (without text).

I have also some kind of "shrub" in the example (higrass.png) If player step on square with higrass, I want show picture over whole screen somewhat to made feeling "standing in the shrub". But I investigated that "same_square" graphics is shown also when I am standing beside of the square. Which is probably not good for my "shrub". Is there some same_square property shown only if player is standing on the square with floorupright item? Drawing code seems rather complicated...
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

I didn't found it nowhere on forums:
1. Can be pending messages stopped? I send messages with delay with first trigger. I want storno (delayed) messages if player step on second trigger. Is it possible?
2. I have func_caller which is repeatly opening and closing doors, using M_NEXTTICK. Now I want stop it. Just sending M_DEACTIVATE to func_caller seems not working - what is the best way?
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

lenochware wrote:Well, I have idea of some bomb which will explode when monster step on it
You could also dynamically create a floor trigger using on_drop, which is then removed when with on_click. That is how I'd do it, anyway.
lenochware wrote:Next engine draw dungeon, but didn't draw roof (or maybe other "transparent" areas too), so background image (with sky) would be visible instead of roof. But if it is not easy, forget it - I kinda like my sky
The roof bitmap is drawn first, and it can be any size. I think this pretty much does what you want already.
lenochware wrote:Can be pending messages stopped? I send messages with delay with first trigger. I want storno (delayed) messages if player step on second trigger. Is it possible?
You can use dsb_delay_msgs_to(inst, delay) that delays all messages destined for a specific target. However, that may not be what you want. What are you trying to do? Maybe there's a different approach.
lenochware wrote:I have func_caller which is repeatly opening and closing doors, using M_NEXTTICK. Now I want stop it. Just sending M_DEACTIVATE to func_caller seems not working - what is the best way?
When a func_caller receives a deactivate message, it calls whatever function that you have set up to call on receiving a deactivate message. So, just make it call a function that ends whatever loop you've started, and it will work. Alternatively, if you want this to happen automatically, you can use a msg_sender, which handles the looping and the deactivation automatically.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Thank you for the answers.
I did't know different way than using some h_monster_move, but you are true, it seems possible!
The roof bitmap is drawn first, and it can be any size....
But roof bitmap repeats on each square - or no?

btw. I did some investigation regarding font loading, and it seems that you must have exactly the same palette and number of colors in palette like in original font (image editors tends to pack colors in palette). Otherwise strange things can happen.

Are contributions to wiki welcomed? I would add sys_* functions from base code and maybe I would try add some undocumented events.
Here is list of all "on_*" strings from base code (maybe could be useful for someone?):

on_absorb
on_attack_close
on_attack_ranged
on_burn
*on_click
on_click_func
*on_consume
on_damage
on_damage_char
*on_deplete
on_die
*on_drop
on_empty_square_attack
on_expire
*on_fly
*on_impact
on_impact_success
*on_incoming_impact
on_init
on_location_drop
on_location_explode
on_location_pickup
*on_look
*on_melee_damage_monster
on_monster_flip
*on_monster_move_into
on_monster_shift
on_move
on_shot_missile_impact
*on_spawn
on_special
on_steal
on_succeed_attack_close
on_succeed_attack_ranged
on_take_melee_damage
on_target_explode
*on_teleport
*on_throw
*on_trigger
on_try_move
*on_turn
on_want_move
*on_zone_drop

Btw. I am almost done with my little dungeon. :)
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Ok, so here is my first attempt: http://lenochware.ic.cz/tod.zip Only two levels, sorry.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Can be gui_info element shown/hidden dynamically during game? I would could use it for shopping... Maybe even for automap in right column like in dm2...
Can be enabled "target" button in ESB for monster? I would like link shopkeeper with stock items, using "target" button, but esb_take_targets =true seems not work for monsters.
If monster is centered on the tile and there is floorupright in the quarter of the tile near the player, monster is still drawn over this floorupright.
It would be useful for me if I could draw floorupright over monster on the same tile. Maybe also floorupright which always redraw anything on the same tile...
I would like do shopkeeper turning to right and pressing "emergency" button when attacked. Is it possible?
User avatar
Sophia
Concise and Honest
Posts: 4240
Joined: Thu Sep 12, 2002 9:50 pm
Location: Nowhere in particular
Contact:

Re: Scripting and other questions

Post by Sophia »

lenochware wrote:Can be gui_info element shown/hidden dynamically during game? I would could use it for shopping... Maybe even for automap in right column like in dm2...
Not easily. It's designed for constant things. That said, you could probably "take over" the spell interface or the attack method interface for your custom shopping interface, although it would be a bit ugly code-wise. Another option is to face a blank wall with a fancy clickable wallitem on it and do your shopping in the main viewport window-- remember that on_click's parameter list is (self, id, what, x, y) so it has the relative coordinates where it got the click, meaning you can actually build a wallitem with a pretty fancy interface.
lenochware wrote:Can be enabled "target" button in ESB for monster? I would like link shopkeeper with stock items, using "target" button, but esb_take_targets =true seems not work for monsters.
Ok, I'll enable it.
lenochware wrote:If monster is centered on the tile and there is floorupright in the quarter of the tile near the player, monster is still drawn over this floorupright.
It would be useful for me if I could draw floorupright over monster on the same tile. Maybe also floorupright which always redraw anything on the same tile...
Monsters and flooruprights aren't even "supposed" to coexist on the same tile at all, so it's honestly not surprising to me that they don't behave in a way that you'd expect. There is really no way for me to fix this without completely ripping apart a lot of rendering code, which is one of the ugliest parts of DSB, so I'd really rather not tackle this-- a workaround is to make whatever obstruction you want itself an invincible immobile monster, then it will get drawn along with monsters and be drawn in the order you want.
lenochware wrote:I would like do shopkeeper turning to right and pressing "emergency" button when attacked. Is it possible?
Some code in h_monster_took_damage should work.
lenochware
Novice
Posts: 23
Joined: Tue Dec 10, 2013 1:51 pm

Re: Scripting and other questions

Post by lenochware »

Not easily. It's designed for constant things.
Ok. For me, it would be enough, if when sys_render_other() would return true, nothing would be rendered.
Yes, (x,y) parameters are cool feature and I am planning use it for something!
I have idea of shopkeeper without gui interface now, so I am fine.:)
There is really no way for me to fix this without completely ripping apart a lot of rendering code
Ok, I understand.

Well, I was wonder about possibilities of dsb_ai() method of controlling monster (which is great idea). I mean if I can move monster to the some defined place, turn him, set some frame of the monster images (pressing button), keep monster at one tile, set it inactive (sleeping) unless it sees the player etc... just thinking about possibilities. But I didn't really test it yet.

Thanks for the ideas and advices.
Post Reply