
Things that are necessary for a merge into master are marked with [!].
[!] Test everything. The controls branch messes with a lot of different things. Make sure that there are no major bugs.
[!] Evaluate the interaction menu for user-friendlyness. What could be improved?
- Implement drag&drop for the new gui system + script interface.
- Make the Clonk icons (top of screen) use the new gui system.
- People have complained about "soft" controls in OC before. As in, the Clonk does not react instantly. This might be the time to mess with the acceleration values if necessary?
- fix backwards throw when running hitting you in the face
- Possibly add an old-school HP bar at the left of the screen?!
Font size is clear. Menu size should however say how much space of the screen a default menu covers.
I can imagine that a fullscreen menu with a huge screen usually looks pretty stupid, while on a small screen it should cover everything -> make available to user and give sensible defaults.
- production is broken? (Pyrit)
I am posting this now not only because someone asked, but also because I want to keep track of it for myself. I will most likely not have much time until after the exams again (even though there definitely was progress over christmas!).
This list is certainly not complete.
I think some basic testing on the controls branch (playing at least a few multiplayer melees and settlement rounds) is essential before merging.

Also: Do you prefer If I file bugs for stuff like "The mouse position detection in the interaction menu is broken, you have to click lower than the item is displayed.", or should I just tell you?

And I think that posting the bugs here is better for now. At least if the bugs are not in the master branch and/or until Controls is very close to be merged
>how do I stop a construction?
Didn't change anything there yet
>How do I pick up stuff without standing in front of it and scrolling?
I plan to add an "environment" tab to the inventory menu; also maybe allowing collection with [down] into any slot might make sense?
> Is it possible to rearrange the item order in the menu?
No. That's not planned at the moment
6.0: Caught signal SIGABRT
/home/maikel/openclonk/repos/build/openclonk[0x7be995]
/lib/x86_64-linux-gnu/libc.so.6(+0x36d40)[0x7f2d40196d40]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x39)[0x7f2d40196cc9]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x148)[0x7f2d4019a0d8]
/lib/x86_64-linux-gnu/libc.so.6(+0x2fb86)[0x7f2d4018fb86]
/lib/x86_64-linux-gnu/libc.so.6(+0x2fc32)[0x7f2d4018fc32]
/home/maikel/openclonk/repos/build/openclonk(_ZN17C4ScriptGuiWindow18CreateFromPropListEP10C4PropListbbb+0x10f)[0x8fa215]
/home/maikel/openclonk/repos/build/openclonk(_ZN17C4ScriptGuiWindow18CreateFromPropListEP10C4PropListbbb+0x721)[0x8fa827]
/home/maikel/openclonk/repos/build/openclonk(_ZN17C4ScriptGuiWindow18CreateFromPropListEP10C4PropListbbb+0x721)[0x8fa827]
/home/maikel/openclonk/repos/build/openclonk(_ZN17C4ScriptGuiWindow18CreateFromPropListEP10C4PropListbbb+0x721)[0x8fa827]
/home/maikel/openclonk/repos/build/openclonk(_ZN17C4ScriptGuiWindow18CreateFromPropListEP10C4PropListbbb+0x721)[0x8fa827]
/home/maikel/openclonk/repos/build/openclonk[0x88716d]
/home/maikel/openclonk/repos/build/openclonk(_ZN13C4AulDefFunc1IiP10C4PropListE4ExecES1_P7C4Valueb+0x42)[0x8979b6]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4CallEP9C4AulFuncP7C4ValueS3_P10C4PropList+0x52c)[0xb5cf04]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP8C4AulBCCb+0xc7c9)[0xb5b18b]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP15C4AulScriptFuncP10C4PropListP7C4Valueb+0x268)[0xb4e97a]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4AulScriptFunc4ExecEP10C4PropListP7C4Valueb+0x63)[0xb5d795]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulFunc4ExecEP10C4PropListP11C4AulParSetb+0x43)[0x7f5947]
/home/maikel/openclonk/repos/build/openclonk(_ZN10C4PropList4CallEPKcP11C4AulParSetb+0xad)[0xb71abf]
/home/maikel/openclonk/repos/build/openclonk(_ZN8C4Effect6DoCallEP8C4ObjectPKcRK7C4ValueS6_S6_S6_S6_S6_S6_+0x1a1)[0x874be7]
/home/maikel/openclonk/repos/build/openclonk[0x885e0d]
/home/maikel/openclonk/repos/build/openclonk(_ZN12C4AulDefFunc4ExecEP10C4PropListP7C4Valueb+0x65)[0xb77dab]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4CallEP9C4AulFuncP7C4ValueS3_P10C4PropList+0x52c)[0xb5cf04]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP8C4AulBCCb+0xc7c9)[0xb5b18b]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP15C4AulScriptFuncP10C4PropListP7C4Valueb+0x268)[0xb4e97a]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4AulScriptFunc4ExecEP10C4PropListP7C4Valueb+0x63)[0xb5d795]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulFunc4ExecEP10C4PropListP11C4AulParSetb+0x43)[0x7f5947]
/home/maikel/openclonk/repos/build/openclonk(_ZN8C4Effect3NewEP8C4ObjectP8C4StringiiS1_4C4IDRK7C4ValueS7_S7_S7_+0x33f)[0x8729e1]
/home/maikel/openclonk/repos/build/openclonk[0x88596f]
/home/maikel/openclonk/repos/build/openclonk(_ZN14C4AulDefFunc10I7C4ValueP8C4StringP8C4ObjectiiS4_4C4IDRKS0_S7_S7_S7_E4ExecEP10C4PropListPS0_b+0x156)[0x89688a]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4CallEP9C4AulFuncP7C4ValueS3_P10C4PropList+0x52c)[0xb5cf04]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP8C4AulBCCb+0xc7c9)[0xb5b18b]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulExec4ExecEP15C4AulScriptFuncP10C4PropListP7C4Valueb+0x268)[0xb4e97a]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4AulScriptFunc4ExecEP10C4PropListP7C4Valueb+0x63)[0xb5d795]
/home/maikel/openclonk/repos/build/openclonk(_ZN9C4AulFunc4ExecEP10C4PropListP11C4AulParSetb+0x43)[0x7f5947]
/home/maikel/openclonk/repos/build/openclonk(_ZN10C4PropList4CallEPKcP11C4AulParSetb+0xad)[0xb71abf]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4PlayerControl20ExecuteControlScriptEi4C4IDbRK14C4KeyEventDatab+0x394)[0x80eaec]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4PlayerControl20ExecuteControlActionEiN18C4PlayerControlDef7ActionsE4C4IDbRK14C4KeyEventDatab+0x12e)[0x80e1a6]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4PlayerControl14ExecuteControlEibRK14C4KeyEventDataibb+0x2e1)[0x80e013]
/home/maikel/openclonk/repos/build/openclonk(_ZN15C4PlayerControl20ExecuteControlPacketEPK22C4ControlPlayerControl+0xe9)[0x80dcbb]
/home/maikel/openclonk/repos/build/openclonk(_ZNK22C4ControlPlayerControl7ExecuteEv+0x66)[0x7ec3d4]
/home/maikel/openclonk/repos/build/openclonk(_ZNK9C4Control7ExecuteEv+0x66)[0x7ea710]
/home/maikel/openclonk/repos/build/openclonk(_ZN13C4GameControl7ExecuteEv+0x1c4)[0x7fe4a2]
/home/maikel/openclonk/repos/build/openclonk(_ZN6C4Game7ExecuteEv+0x79)[0x851d9d]
/home/maikel/openclonk/repos/build/openclonk(_ZN13C4Application8GameTickEv+0x2a5)[0x84dfa9]
/home/maikel/openclonk/repos/build/openclonk(_ZN22C4ApplicationGameTimer7ExecuteEiP6pollfd+0x204)[0x84e7a2]
/home/maikel/openclonk/repos/build/openclonk(_ZN12StdScheduler15DoScheduleProcsEi+0x46c)[0xbb7eb0]
/home/maikel/openclonk/repos/build/openclonk(_ZN13C4AbstractApp15DoScheduleProcsEi+0x33)[0xb28481]
/home/maikel/openclonk/repos/build/openclonk(_ZN12StdScheduler13ScheduleProcsEi+0x239)[0xbb64f1]
/home/maikel/openclonk/repos/build/openclonk(_ZN13C4AbstractApp3RunEv+0x1f)[0xb2843d]
/home/maikel/openclonk/repos/build/openclonk(main+0x18f)[0x7bebe9]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f2d40181ec5]
/home/maikel/openclonk/repos/build/openclonk[0x7be60d]
I can move it to the bugtracker if preferred (happened when pressing E in front of Lorry)

You did not tamper with any of the menus or anything like that?
PS: it seems to work for me
PPS: and that is one of the assertions I thought could never ever fail. At least not without breaking the implementation of proplists.

I guess I'd need Guenther to debug that as I suspect the problem is somewhere in the proplist code

Program received signal SIGINT, Interrupt.
StdStrBuf::Grow (this=0x7fffffffbc20, iGrow=1)
at /home/maikel/openclonk/repos/src/lib/StdBuf.h:519
519 }
(gdb) bt
#0 StdStrBuf::Grow (this=0x7fffffffbc20, iGrow=1)
at /home/maikel/openclonk/repos/src/lib/StdBuf.h:519
#1 0x00000000007c55fa in StdStrBuf::AppendChars (this=0x7fffffffbc20,
cChar=100 'd', iCnt=1) at /home/maikel/openclonk/repos/src/lib/StdBuf.h:601
#2 0x00000000007c5670 in StdStrBuf::AppendChar (this=0x7fffffffbc20,
cChar=100 'd') at /home/maikel/openclonk/repos/src/lib/StdBuf.h:607
#3 0x0000000000b76fe0 in FnStringFormat (_this=0x12de0740,
szFormatPar=0xb03ffc0, Pars=0x10bafc0 <AulExec+28864>, ParCount=9)
at /home/maikel/openclonk/repos/src/script/C4Script.cpp:41
#4 0x0000000000b79d15 in FnFormat (_this=0x12de0740,
Pars=0x10bafa8 <AulExec+28840>)
at /home/maikel/openclonk/repos/src/script/C4Script.cpp:371
#5 0x0000000000b77dab in C4AulDefFunc::Exec (this=0x1a12e80, p=0x12de0740,
pPars=0x10bafa8 <AulExec+28840>, fPassErrors=true)
at /home/maikel/openclonk/repos/src/script/C4Script.cpp:152
#6 0x0000000000b5cf04 in C4AulExec::Call (this=0x10b3f00 <AulExec>, pFunc=
0x1a12e80, pReturn=0x10bafa8 <AulExec+28840>,
pPars=0x10bafa8 <AulExec+28840>, pContext=0x12de0740)
at /home/maikel/openclonk/repos/src/script/C4AulExec.cpp:891
#7 0x0000000000b5b18b in C4AulExec::Exec (this=0x10b3f00 <AulExec>,
pCPos=0xb0438b0, fPassErrors=false)
at /home/maikel/openclonk/repos/src/script/C4AulExec.cpp:673
#8 0x0000000000b4e97a in C4AulExec::Exec (this=0x10b3f00 <AulExec>, pSFunc=
---Type <return> to continue, or q <return> to quit---
0x827eee0, p=0x12de0740, pnPars=0x7fffffffcef0, fPassErrors=false)
at /home/maikel/openclonk/repos/src/script/C4AulExec.cpp:166
#9 0x0000000000b5d795 in C4AulScriptFunc::Exec (this=0x827eee0, p=0x12de0740,
pPars=0x7fffffffcef0, fPassErrors=false)
at /home/maikel/openclonk/repos/src/script/C4AulExec.cpp:1030
#10 0x00000000007f5947 in C4AulFunc::Exec (this=0x827eee0, p=0x12de0740,
pPars=0x7fffffffcef0, fPassErrors=false)
at /home/maikel/openclonk/repos/src/script/C4AulFunc.h:82
#11 0x0000000000b71abf in C4PropList::Call (this=0x12de0740,
s=0xa147640 "OnPlayerClick", Pars=0x7fffffffcef0, fPassErrors=false)
at /home/maikel/openclonk/repos/src/script/C4PropList.cpp:594
#12 0x00000000008f6f69 in C4ScriptGuiWindowAction::ExecuteCommand (
this=0x12debf20, actionID=6, parent=0x12deab60, player=0)
at /home/maikel/openclonk/repos/src/gui/C4ScriptGuiWindow.cpp:259
#13 0x00000000008f6fc4 in C4ScriptGuiWindowAction::ExecuteCommand (
this=0x12debed0, actionID=6, parent=0x12deab60, player=0)
at /home/maikel/openclonk/repos/src/gui/C4ScriptGuiWindow.cpp:263
#14 0x00000000008fe6cf in C4ScriptGuiWindow::ExecuteCommand (this=0x12deab60,
actionID=6, player=0, subwindowID=101, actionType=21, target=0x12de0740)
at /home/maikel/openclonk/repos/src/gui/C4ScriptGuiWindow.cpp:2090
#15 0x00000000008fe5d7 in C4ScriptGuiWindow::ExecuteCommand (this=0x12de53f0,
actionID=6, player=0, subwindowID=101, actionType=21, target=0x12de0740)
at /home/maikel/openclonk/repos/src/gui/C4ScriptGuiWindow.cpp:2074
---Type <return> to continue, or q <return> to quit---
#16 0x00000000007ed438 in C4ControlMenuCommand::Execute (this=0x12dfd00)
at /home/maikel/openclonk/repos/src/control/C4Control.cpp:572
#17 0x00000000007ea710 in C4Control::Execute (this=0x7fffffffd430)
at /home/maikel/openclonk/repos/src/control/C4Control.cpp:126
#18 0x00000000007fe4a2 in C4GameControl::Execute (this=0x107f980 <Control>)
at /home/maikel/openclonk/repos/src/control/C4GameControl.cpp:318
#19 0x0000000000851d9d in C4Game::Execute (this=0x1036c60 <Game>)
at /home/maikel/openclonk/repos/src/game/C4Game.cpp:729
#20 0x000000000084dfa9 in C4Application::GameTick (
this=0x102bbe0 <Application>)
at /home/maikel/openclonk/repos/src/game/C4Application.cpp:709
#21 0x000000000084e7a2 in C4ApplicationGameTimer::Execute (this=0x1437710,
iTimeout=0) at /home/maikel/openclonk/repos/src/game/C4Application.cpp:905
#22 0x0000000000bb7eb0 in StdScheduler::DoScheduleProcs (this=
0x102bbe0 <Application>, iTimeout=27)
at /home/maikel/openclonk/repos/src/platform/StdSchedulerPoll.cpp:166
#23 0x0000000000b28481 in C4AbstractApp::DoScheduleProcs (this=
0x102bbe0 <Application>, iTimeout=27)
at /home/maikel/openclonk/repos/src/platform/C4App.cpp:37
#24 0x0000000000bb64f1 in StdScheduler::ScheduleProcs (
this=0x102bbe0 <Application>, iTimeout=27)
at /home/maikel/openclonk/repos/src/platform/StdScheduler.cpp:153
#25 0x0000000000b2843d in C4AbstractApp::Run (this=0x102bbe0 <Application>)
---Type <return> to continue, or q <return> to quit---
at /home/maikel/openclonk/repos/src/platform/C4App.cpp:25
#26 0x00000000007bebe9 in main (argc=3, argv=0x7fffffffd928)
at /home/maikel/openclonk/repos/src/game/ClonkMain.cpp:237

FnStringFormat
Then apply the attached patch to that repository and run Labyrinth.ocs. Then in the command line type "/medals" and in the opened menu click on you player/clonk entry.
EDIT: It seems to just be an infinite script loop I created!!

To remove them you can simply call
GuiClose(int32_t guiID, int32_t subwindowID, C4Object *target)
where
subwindowID
is the ID you assigned to the entry. guiID
is the "main ID" that your call to GuiOpen
returned.You cannot close/update items by index as in "the last two entries".

Thanks!

Especially with scroll to select items.
Yes, picking up objects by pressing DOWN would be really convenient, having to scroll to a free spot really isn't.
Shift + throw for laying down objects would be cool, too.
I think the inventory and production menues are really big now, they fill the whole screen and there is a lot blank space on them.
>Possibly add an old-school HP bar at the left of the screen?!
I'm all for it! :)
I also tried to use a producer and couldn't figure out how.
The production menue is now the same as the inventory, right? But clicking on producable items didn't do anything it seems, even if I had the required materials in the foundry.
Speaking of producers, I would find it cool that if the produces uses landscape pixels it would have an own reservoir for them. So buckets/barrels get always emptied into the foundryand you can re-use them right away. This would be cnice to have if you need to produce a lot of loam and have only 1 bucket. You could even pump water into the foundry then.
By clicking on the resevoir it could also transfer water back into a barrel, if you are holding one. If the pump had a reservoir, you could use that for nicely filling barrels with it.

>Yes, picking up objects by pressing DOWN would be really convenient, having to scroll to a free spot really isn't.
>Shift + throw for laying down objects would be cool, too.
Mh, I guess I will eventually implement drag & drop for the custom GUIs. Then items could be dropped from the inventory menu by dragging them outside of the menu
PS: Oh, you meant directly ingame and not from the menu? Mh, I'll think about that... once I remember why I threw out [down] for collecting... I know I did that deliberately. I just can't remember why.
>The production menue is now the same as the inventory, right? But clicking on producable items didn't do anything it seems, even if I had the required materials in the foundry.
Mh, could be that there are bugs (even though I tested that at some point... I think?). Will check/fix when I have time™
>Speaking of producers, I would find it cool that if the produces uses landscape pixels it would have an own reservoir for them. So buckets/barrels get always emptied into the foundryand you can re-use them right away. This would be cnice to have if you need to produce a lot of loam and have only 1 bucket. You could even pump water into the foundry then.
I like that idea. With the new menu there could even be a nice way to represent that (just show an image of a material pile below "Inventory")
>But clicking on producable items didn't do anything it seems, even if I had the required materials in the foundry.
It worked for me. Do you have a reproducing record?
Hmm, we might want to drop the requirement that the items are in the foundry and allow quick and direct prouction by just clicking when the clonk has the items.

>Hmm, we might want to drop the requirement that the items are in the foundry and allow quick and direct prouction by just clicking when the clonk has the items.
Sounds very sensible, watchlist'd!
Should the producer first consume contents of the Clonk or own contents? Probably of the Clonk as this is why you are there in the first place..?

What about introducing a material object for "loose earth" or "water"? When a bucket is brought into a production building, it would empty its "loose earth" contents into the building which would then be shown in the inventory of the producer.
Advantages:
* you could store material in buildings without a bucket (you'd get the empty bucket back)
* you could also fill the material back into the bucket; you could not carry it without a bucket however
* construction requirements would not need a special case for materials; loam would just use "3 x earth objects + 2 x water objects", for example
* the bucket could just use the HasExtraSlot library and contain material objects like a bow contains arrows
-> this would need less special cases in the inventory menu etc.
* it would be obvious for the players that a loam needs less earth than a bucket yields (aka "you can make multiple loams with one bucket")


Ideally, the inventory menu would show the extra slot in a nice way. So you would fill a bucket with earth and it would directly show you "contains 10 earth" (like a bow would show "contains 5 arrows"). That way you wouldn't even need to put the bucket into the producer before you could make the mental connection.
Btw, I feel more for cleaning up the chaos which are the controls currently than introducing all kinds of fancy features.

>And getting the earth back into the bucket?
Would need one click on the earth object. It would then check in
RejectEntrance
whether it can be stacked into a bucket in the Clonk. Just like it (hopefully?) works right now with arrows and the bow and Library_HasExtraSlot.>Btw, I feel more for cleaning up the chaos which are the controls currently than introducing all kinds of fancy features.
Sure, that has priority. There are many things, however, only I will be able (and motivated) to do: messing with the interaction menu, for example.
Things like the bucket are so decoupled that someone else could do that without problems.
Also, if I decide to show the material in the interaction menu of producers (like Pyrit suggested and it's a really good idea imo), I'd need to think about this anyway.
Reading this, do you have an idea on how to fix the arrow problem on the Controls branch? I.e. changing the type of arrow in the bow.

>Reading this, do you have an idea on how to fix the arrow problem on the Controls branch? I.e. changing the type of arrow in the bow.
Yes, I thought about that yesterday or so. I believe the best solution would be to show the contained object as an icon in the bow description window and then somehow*) allow the player to click it.
Once drag & drop is implemented, you could also just drag your arrows into/onto your bow in the inventory.
I'll do a mock-up...
PS: that's also how the bucket would then show "contains 10 earth"

I hereby license the file ExtraSlotMockup.jpg under the CC-BY license

>Yes, I thought about that yesterday or so. I believe the best solution would be to show the contained object as an icon in the bow description window and then somehow*) allow the player to click it.
Idk if it's good to click on the items, if you are in the middle of a battle. The mouse is the thing you have to aim with, and I wouldn't like to drive the mouse cursor all over the screen just to change the firemode of a weapon. In most shooters you have a key on the keyboard assigned to it. That's how EKE and Hazard did it, right? I think it was V or something to change firemode.

The current interaction menu shows the description box when you hover over an item. I don't see how you would move the mouse into the description box if it contains buttons ("take arrows out"). Ideas?
I can't really make the description stay when you click an item, as clicking means "put into other container".

>take arrows out
In the clonk inventory, have a little button superimposed items that are containers. (E.g. the bow). That button would jump from the clonk's inventory to the "bow's inventory"
It's like having a container in an container.
Another example of this:
You could have a flint in a lorry in a wagon. Go with a clonk in front of the wagon and open the inventory. It shows the wagon's contents. And it also shows the lorry, because it is a content of the wagon. On the lorry is a little button. Clicking the button would change from the wagon's inventory to the lorry's inventory.
_____________________________________________________
Or some other idea I just came up with:
This case: Clonk Vaccer holds a bow that holds arrows. How do we access Vaccers arrows (wich are in the bow she's holding)? Just show the bow (or any container that's inside another container) on the right side along with all the "normal" containers. So On your mockup (ExtraSlotMockup.jpg) the right side would just have another tab added, wich is called maybe "Vaccer's bow". So you could acces the bows inventory easily.
I see a downside though: if you had many containers to interact with, some could have the same name. E.g. 2 lorrys wich hold a bow with arrows each. You wouldn't know how to take out the arrows from the bow in the first lorry, because both additional tabs would be called lorry's bow.
____________________________
Hmmm all this stuff doesn't address the issue of clicking buttons inside the description box... Just how to take out arrows from bows...
But yea, I wouldn't make special case buttons like "take arrows out". Instead just treat the bow like another container that only accepts arrows...


I'm still in favor of seeing that's actually a pixely material and have it also measured in pixels.
See image:
The buttons are for transfering stuff back into bucket, barrel. Greyed out, or not shown, when clonk doesn't hold bucket/barrel.
Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill