hello there,
this is my first day i am using ags and i have been doing a lot of things today in customizing my own adventure, so far been finding out how to create own gui's (even text gui's), remove the text background, make an outlined text that is only used in speech but not in the menus, and recoded some minor stuff that i didn't like (added escape key option for inventory), done a transparent inventory with only 2 options and created own alpha channel graphics (i guess i can only use 1 colour as transparent, not really use an alpha channel so i could use anti-aliased sprites around the edges of the objects ?)
now i have found out how to use eMode for the mouse clicks.
what i want to do is : left click does walking AND using objects (and inventory objects), right click does look.
i implemented that already, but all i am missing is a trigger that tells me, if the cursor is on a usable object or useable hotspot, so i can set the mouse.mode to interact, else i would set the mouse.mode to walk.
here is my script so far:
function on_mouse_click(MouseButton button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if (IsGamePaused() == 1) {
// Game is paused, so do nothing (ie. don't allow mouse click)
}
else if (button == eMouseLeft) { // LEFT MOUSE BUTTON
if (CURSOR ON A USABLE OBJECT OR HOTSPOT) {
if (player.ActiveInventory!=null){ // IF INVENTORY OBJECT IS SELECTED
mouse.Mode=eModeUseinv; // SELECT USE INVENTORY OBJECT MODE
}
else {
mouse.Mode=eModeInteract; // ELSE SELECT INTERACT MODE
}
ProcessClick(mouse.x, mouse.y, mouse.Mode); // DO LEFT CLICK WITH SELECTED MOUSE MODE
}
else {
mouse.Mode=eModeWalkto; // IF CURSOR IS ON NO OBJECT SELECT WALK MODE
ProcessClick(mouse.x, mouse.y, mouse.Mode); // DO LEFT CLICK WITH SELECTED MOUSE MODE
}
}
else if (button == eMouseRight){
mouse.Mode=eModeLookat; // SELECT LOOK AT MODE
ProcessClick(mouse.x, mouse.y, mouse.Mode); // DO LEFT CLICK WITH SELECTED MOUSE MODE
}
}
i have been searching the forum and looking at faqs and variables, but couldn't find anything specific to this.
i could of course download an existing left/right mod, but i looked at the existing one and it only makes use of the lookat feature together with walk mode, that is available to all objects and hotspots, so i couldn't find the trigger i am looking for in there.
the trigger is this line in the beginning - if (CURSOR ON A USABLE OBJECT OR HOTSPOT) -
if there is no function for this (like checking mouse.x and mouse.y for objects 0 to 99 beeing there in that room or something), would there be another way to do this ?
What you need is GetLocationType() (http://www.adventuregamestudio.co.uk/manual/GetLocationType.htm).
You'll also need to set inventory clicks to be handled in script in General settings and eModeLeft/RightInv.
There's also the .GetAtScreenXY() function for InventoryItems, Characters, Hotspots and Objects.
Quote from: digitalray on Tue 12/04/2011 18:09:59i guess i can only use 1 colour as transparent, not really use an alpha channel so i could use anti-aliased sprites around the edges of the objects ?
If you set the game's color depth to 32bit, you can import PNGs with alpha channels. There are some quirks when you want to use them as GUI buttons though, but as character/object graphics and the like they work fine.
Btw, you can use the [code
] tag to encapsulate code to make it more readable.
works ! :)
thanx khris !! thanks a lot !
it didn't work when i only used IF GetLocationType == character || object, but it started working, when i just used IF GetLocationType != nothing.
don't know why, but it runs the other way rund with the != function and "nothing" ;)
Operators like || and && work only on boolean (true/false) expressions like equations, you can't directly substitute them for any "or" or "and" in a natural language sentence. So "if the location is a character or object" must be rewritten as "if the location is a character or the location is an object" before you can turn it into a condition.
ok, i thought it would translate it automatically.
i also wondered if i need some more round brackets or anything to somehow combine the expressions to one, but now i see that i would need an extra step to do this.
thanks for the hint !
would it work the way like i did it with boolean like this (imagined there is a boolean GetLocationType_NOTHING) and would it make sense at all (i mean true and false are opposite, why would anyone use them with an AND or OR :) ) ?
IF (GetLocationType_NOTHING(mouse.x,mouse.y) == true || false) {}
but i guess you meant TWO OR MORE booleans (not values) in one IF.
does ANDOR exist then or would i have to take two OR IFs, one with an AND, even with boolean ?
i will find out... :)
thanks again for your help so far.
What he meant is that you have to write
if (GetLocationType(mouse.x,mouse.y) == eLocationCharacter || GetLocationType(mouse.x,mouse.y) == eLocationObject)
instead of
if (GetLocationType(mouse.x,mouse.y) == eLocationCharacter || eLocationObject)
oh thanks matti, so it does indeed work with extra round brackets like i thought and i don't need a second IF..
have to try that the next days.
Sorry, you don't need extra brackets, that was a mistake.
oh :( .. ok ;)
on to my next problem
i just coded a function called set_mouse_mode () and defined it in the header to make it work, that checks where your mouse cursor is with the GetLocationType function and sets the appropriate symbol and mouse mode automatically. so the cursor is a hand when i can use an object or the walking man when i can just walk somewhere. this already works.
but i would need another information.. i want to use the eye symbol if there is no interact event set at a hotspot or an object and it should only change to the hand symbol if an interact event is set for the hotspot/object the mouse cursor is currently hovering on.
how can i check if there is an Event set for Interact in this hotspot or event ?
- i could use GetAtScreenXY with hotspot or object to get the name of it as a Hotspot* pointer.
like
if ((Hotspot.GetAtScreenXY(mouse.x, mouse.y)).RunInteraction(eModeInteract) != 0) {
mouse.Mode=eModeInteract; // ELSE SELECT INTERACT MODE
}
else mouse.Mode=eModeLookat; // ELSE SELECT INTERACT MODE
but this does not work, because runinteract needs a hotspot pointer value before .RunInteraction.
i don't even know, if RunInteraction returns a 0 if there is no interaction set.
Could i set the Hotspot* Pointer in place of a Hotspot value before the .RunInteraction ?
would RunInteraction (hotspot) give me a specific return i could use if there was no interaction set for the hotspot like a zero if there is no interaction set ?
well i got it half running (it checks, and if the hotspot runinteraction value is not NOT 0, it displays the eye icon) with this code (i defined a new Hotspot* hsnow as variable to use in RunInteraction):
Hotspot* hsnow;
function set_mouse_mode ()
{
if (GetLocationType(mouse.x,mouse.y) != eLocationNothing) { // MOUSE IS ON AN OBJECT OR HOTSPOT OR CHARACTER
if (player.ActiveInventory!=null){ // IF INVENTORY OBJECT IS SELECTED
mouse.Mode=eModeUseinv; // SELECT USE INVENTORY OBJECT MODE
}
else {
hsnow = Hotspot.GetAtScreenXY(mouse.x, mouse.y);
if (hsnow.RunInteraction(eModeInteract) != 0) {
mouse.Mode=eModeInteract; // ELSE SELECT INTERACT MODE
}
else mouse.Mode=eModeLookat; // ELSE SELECT INTERACT MODE
}
}
else {
mouse.Mode=eModeWalkto; // IF CURSOR IS ON NO OBJECT SELECT WALK MODE
}
}
the problem is though ;) ... : if the runinteraction (hotspot) IS in fact not 0 (so the runinteraction function does something), the interaction is exectued with the runinteraction () as soon as the mouse gets over an interactable object.
secondly would i need a static hotspot* variable ?
is there a way to "check" or "test" the runinteraction () without really executing it ?
in this situation i don't really like "closed source" applications.. :-/
another idea on this:
what can i do with the "Interact hotspot" and it's value "hHotspot3_Interact" (this value is in fact a function that can be empty, hooray ;)) that i can see in AGS Editor in the Room Events ?
how can i get to this valued function ?
get the hotspot name through getatlocationXY and use my own hsnow variable with it so i have the hotspot name. so far so good, but how can i reach it's interact function name from it's name ?
and how would i convert the different types into a string that i can use as a function name in an IF ??
third way to think: Hotspot.GetLocationXY has an enum called hotspot that saves the name of the hotspot in # 2... maybe anyone knows if the hotspot interact value (that should be empty and so == 0) is also stored in the hotspot enum ? edit: ok, wrong guess.. the hotspot enum just hold the numbered hotspots for the room.. :/
ok, blind guess 4: is GetDefaultInteractionAtScreenXY of any help ?
CursorMode GetDefaultInteractionAtScreenXY(int x, int y)
Returns the value of the property DefaultInteraction for whatever is shown on the screen at the specified (X, Y) co-ordinates. This can be a Character, Hotspot, InventoryItem, or an Object.
try 5: might check the functions against NULL to see if they exist ?
but still.. how to get the interact hotspot function name (hHotspot3_Interact) from the hotspot name (hBox) ?
Slow down there... :)
First of all, a Hotspot is just one type of game object; you'll also need handling for Objects and Characters for a complete interface.
This line:
if (hsnow.RunInteraction(eModeInteract) != 0) {
will, as you found out already, run the interaction (or do nothing if no function is linked).
AGS (and any other similar programming language) doesn't care that it's inside an if condition.
To find out whether an interaction function is available/linked, there's IsInteractionAvailable(int x, int y, int mode).
You can't get to the linked function's name, you can only find out if there is one and you can run it (that's what .RunInteraction is for; whatever that returns, it's most likely useless and you don't need the return value anyway).
Regarding multiple checks inside one if condition:
Like Matti said, you don't need extra brackets.
The following is perfectly fine:
if (a == 1 || a == 3 || a == 5 || a == 7 || a == 9)
ANDOR is the same as OR and is expressed using ||.
You probably meant XOR. XOR can only be done bitwise; since true is evaluated as 1 and false as 0, it should work. The operator is ^.
TomatosInTheHead didn't put it exactly right; it's perfectly possible to use any operator on things other than equations. If you do that, everything that's not false, null or 0 will be evaluated as true/1.
In other words, you can do this:
if (IsInteractionAvailable(mouse.x, mouse.y, eModeInteract))
without having to put "== 1" at the end.
Regarding your very last question: I have no idea what you mean.
I'd recommend reading the complete scripting reference at least once to get an idea what's available.
khris, you are a hero. it works like it should.
and i really don't know why i didn't find this simple function. i searched for interact anywhere for hours.. and i thought i looked for that keyword in the functions page of ags. seems i just didn't.
thanks for all the other information.
i will keep reading the manual and stuff today some more at work.
can't believe i overlooked this function on the ags global functions page.. ::)
http://www.adventuregamestudio.co.uk/manual/IsInteractionAvailable.htm
Quote from: digitalray on Tue 12/04/2011 21:45:34
CursorMode GetDefaultInteractionAtScreenXY(int x, int y)
Just for reference: this is from monkey's Properties module, not a regular AGS command.
...
i tried again for an hour to get this function here running, but it just won't work..
function on_mouse_click(MouseButton button) { // called when a mouse button is clicked. button is either LEFT or RIGHT
if (IsGamePaused() == 1) {
if (GUI.GetAtScreenXY(mouse.x,mouse.y) != gInventory) // if game is paused and NOT in Inventory mode
{} // do nothing
if (GUI.GetAtScreenXY(mouse.x,mouse.y) == gInventory) {
if (button == eMouseRight){
if (mouse.Mode==eModeUseinv) {
mouse.Mode=eModeLookat;
player.ActiveInventory=null;
}
else {
ProcessClick(mouse.x, mouse.y, eModeInteract); // SELECT THE INVENTORY ITEM the mouse is currently on
mouse.Mode = eModeUseinv; // make the cursor be the inventory object
}
}
if (button == eMouseLeft) {
ProcessClick(mouse.x, mouse.y, mouse.Mode);
}
}
}
else {
if (button == eMouseLeft) { // LEFT MOUSE BUTTON
ProcessClick(mouse.x, mouse.y, mouse.Mode); // DO LEFT CLICK WITH SELECTED MOUSE MODE
}
else if (button == eMouseRight){
if (mouse.Mode!=eModeUseinv) {
mouse.Mode=eModeLookat;
ProcessClick(mouse.x, mouse.y, mouse.Mode); // DO LEFT CLICK WITH SELECTED MOUSE MODE
}
else {
mouse.Mode=eModeLookat;
player.ActiveInventory=null;
}
}
}
}
what i want to do is select an inventory item with right mouse click.
what this function does:
check if the mouse x,y is over the inventory GUI.
- if yes: check if left or right mouse button was clicked
- if the right mouse button was clicked on the inventory, the processclick is run with the mouse.mode interact and mouse mode (incl. cursor) set to mouse.Mode = eModeUseinv.
this is in fact the same command as if i would select the inventory mouse arrow (mouse.mode=interact) to select an item.
so why won't this work ?
if i do a left click lookat works and i get the display command for the item, strangely right click does the same ?
it seems that "if (GUI.GetAtScreenXY(mouse.x,mouse.y) == gInventory)" is ignored and the two else cases are run instead.
if the game is NOT paused (inventory not visible), the mouse.mode is selected automatically in another function.
function set_mouse_mode ()
{
if (IsGamePaused() != 1) {
if (GetLocationType(mouse.x,mouse.y) != eLocationNothing) { // MOUSE IS ON AN OBJECT OR HOTSPOT OR CHARACTER
if (player.ActiveInventory!=null){ // IF INVENTORY OBJECT IS SELECTED
mouse.Mode=eModeUseinv; // SELECT USE INVENTORY OBJECT MODE
}
else {
if (IsInteractionAvailable(mouse.x,mouse.y, eModeInteract)) mouse.Mode=eModeInteract; // ELSE SELECT INTERACT MODE
else mouse.Mode=eModeLookat; // ELSE SELECT INTERACT MODE
}
}
else {
if (player.ActiveInventory!=null) {
mouse.Mode=eModeUseinv;
}
else mouse.Mode=eModeWalkto; // IF CURSOR IS ON NO OBJECT SELECT WALK MODE
}
}
}
Turning off the inventory:
bool mouse_has_been_over_invgui;
void repeatedly_execute_always() {
GUI*g = GUI.GetAtScreenXY(mouse.x,mouse.y);
if (gInventory.Visible) {
if (g == null && mouse_has_been_over_invgui) { // mouse was moved away from inventory
gInventory.Visible = false;
mouse_has_been_over_invgui = false; // reset flag
}
else if (g == gInventory) mouse_has_been_over_invgui = true;
}
}
Without the flag, the inventory would turn immediately back off if it was turned on without being under the mouse.
Handling inv clicks:
-If you set the game so that inventory clicks are handled in script, interacting with an InventoryItem will no longer select it.
-button is only eMouseLeftInv or eMouseRightInv if the player clicked on an inventory item, even clicking an empty spot of the InventoryWindow won't trigger that.
What I do is this:
// inside on_mouse_click:
InventoryItem*ai = player.ActiveInventory;
InventoryItem*ia = inventory[game.inv_activated]; // item the player clicked on
...
else if (button == eMouseLeftInv) { // left click on an inventory item (ia)
if (mouse.Mode == eModeUseinv) { // use item on item
if (ai != ia) ia.RunInteraction(eModeUseinv); // only if item wasn't used on itself
}
else { // pick up item
player.ActiveInventory = ia; // this also sets mouse.Mode to eModeUseinv automatically
}
}
else if (button == eMouseRightInv) {
if (mouse.Mode == eModeUseinv) { // lose active inv
player.ActiveInventory = null;
}
else { // look at item
ia.RunInteraction(eModeLookat);
}
}
...
}
Note that several commands aren't executed immediately but only after the current function has finished. Among them are Dialog.Start(), player.ChangeRoom() and, most importantly, ProcessClick().
Thus you can't use it to select the item, just set it as player.ActiveInventory instead.
ok, now i can select the inventory object with right click and left click shows the display message.
but i can't deselect it with right click if it is selected and i am somewhere in the inventory. it only deselect's it, if i am rightclicking on the inventory item itself.
how can i change it, so it get's deselected when right clicking anywhere in the inventory ?
got that thing with the inventory on my own just before you typed it and use my inv_yes bool ;)..
thanks a lot khris, i don't know.. but for me it seems, it's not really that easy for people who are not into coding to use ags with a different interface than ags default at all ;))
i coded an adventure engine back then in 92 together with my dad, he made routines in asm (like direct adressing the video memory for sprites) and i used them in turbo pascal ;)
i coded some bbs apps for proboard (.pex) the next years and some other stuff, went into c++ coding with directx9 after that, but ags is really not as easy as directx9, i have to say ;))
if you know ags very good, it may be simple, but for a newbie into ags.. i really didn't know where to get this from..
InventoryItem*ia = inventory[game.inv_activated]; // item the player clicked on
i still don't know where to look for them in the manual..
You should be able to deselect it if you right-click on any inventory item, not just the active one.
To deselect it over the GUI, use the GUI's OnClick function.
Open the GUI in the editor and double-click it.
This creates
function gInventory_OnClick(GUI *theGui, MouseButton button) {
}
In there, put:
if (button == eMouseRight && player.ActiveInventory != null) player.ActiveInventory = null;
that didn't work :/
What didn't work? What's the error you get?
no error, i inserted that line in the onclick event of the gInventory GUI.
it compiles, but when right clicking in the inventory with a selected item, the item is not deselected.
it still only deselects if right clicking over an inventory item.
i also tried with button == eMouseRightInv, but no change..
the gui is set to clickable, checked that.
i found out why it's not working..
it only works on the GUI (4 pixel edges), but not in the InventoryWindow, when no other items are in there to right click on.
seems that the InventoryWindow Area is an extra area and not the same as the GUI.
i would need a function to check if the mouse(x,y) are on the InventoryWindow area..
Hm, works for me.
Check if the GUI is set to being clickable.
Also, to check if a function is called at all, put a Display("Clicked."); in there (outside the if) and see if it appears.
i found out why it's not working..
it only works on the GUI, but not in the InventoryWindow, when no other items are in there to right click on.
seems that the InventoryWindow Area is an extra area and not the same as the GUI.
i would need a function to check if a mousebutton event was done while the mouse(x,y) are on the InventoryWindow area, as this area is not the same as the gui.
or does it work for you directly in the item area (not to the right where the arrows are) ?
i cleared all buttons and made the inventorywindow as big as the gui itself, i just left about 4 pixels on each side.
in this small area it works, but not in the InventoryWindow itself.
i am referring to the invCustomInv (InventoryWindow; ID0) (the control that is not clickable) from the dropdown box in ags inventory gui, not the gInventory (NormalGUI2) (that is set to clickable=true)
Ah, I see. And inventory windows don't have an OnClick event either.
This worked for me:
void on_event(EventType event, int data) {
if (event == eEventGUIMouseUp) {
if (GUIControl.GetAtScreenXY(mouse.x, mouse.y) == invCustomInv && player.ActiveInventory != null) player.ActiveInventory = null;
}
}
i put this void in the main script, it works now. you are getting close to a god now khris... :o
i tried to use GUIControl with invCustomInv before that, but this alone didn't do the job.
what is the eEventGUIMouseUp used for ? is this the same as mouseclick (i read it's the event if the mouse button is released..)?
the last of the 3 lines seems logic to me, but can you explain to me what is going on in the first 2 lines ?
so this void runs every cycle then and checks if a mouse button was released and if the mouse was over the gui control and if the player activeinventory is NOT empty ?
i miss the right mouse button somewhere in this.. and yes.. as i thought, it works with the left mouse button, too, but it shouldn't.
i see there is no way to use these 3 lines with the ags eMouseRight somehow because there is no clickable event in this area, therefore you had to use an own void and the guimouseup isn't even documented in the ags wiki.
so i guess there is no way to make the event only happen on a right click or a guimouseupright ?
i found IsKeyPressed(13) instead of an on click event in an older post, could this be of value to this somehow ?
You're right, unfortunately it doesn't seem possible to limit this to the right button.
eEventGUIMouseUp is called whenever the player released a mouse button over a (clickable?) GUI.
You can check out the other events here:
http://www.adventuregamestudio.co.uk/manual/TextScriptEvents.htm
Basically AGS calls
on_event(eEventGUIMouseUp, GUIUnderMouse.ID);
so if I define the function in GlobalScript.asc, I can react to the event.
It doesn't run every cycle, only once after the event was detected. This makes it easy to add code globally to actions like losing inventory items or entering a room.
I guess the only way to handle this is to get creative:
// above repeatedly_execute_always
MouseButton last_button;
// add this inside rep_ex_always:
int i = eMouseLeft;
while (i <= eMouseMiddle) {
if (mouse.IsButtonDown(i)) {
last_button = i;
}
i++;
}
(This works because enums are actually ints.)
Now we can always check for the button that was last pressed:
void on_event(EventType event, int data) {
if (event == eEventGUIMouseUp && last_button == eMouseRight) {
if (GUIControl.GetAtScreenXY(mouse.x, mouse.y) == invCustomInv && player.ActiveInventory != null) player.ActiveInventory = null;
}
}
I tested it and it seems to work fine. It's still possible to break this by holding down both buttons etc.
i am still at the first lines, still trying to understand what you did before.
so you created a void instead of a function, because you don't need any return values from the on_event function ? i didn't see the on_event function beeing called somewhere. i just pasted the void in the main script.
so how does this work ?
are all functions that are in the main script called automatically every cycle ? and if so, all others would be called, too..
i don't really get this step, still..
edit: oh, i got it... "the function is called when a particular event happens. "
simple as that. :/
;)
so it would work, too, if we did it like this and set the number of the inventory gui as int data ?
function on_event(EventType eEventGUIMouseUP, int data) {
if (GUIControl.GetAtScreenXY(mouse.x, mouse.y) == invCustomInv && player.ActiveInventory != null) player.ActiveInventory = null;
}
or is this the reason why you used it as a void, because we don't want to use the inventory gui ?
------------
on to the new way you described:
wouldn't it be sufficient to insert "if (mouse.IsButtonDown(eMouseRight))" into the code before with the on_event function or wouldn't this work because the on_event asks for a mousebutton relase that is AFTER the ismousebuttondown function ?
----------------
ok, it didn't work for me like this.
when i go with the mouse to the top gui (gIconBar) the program crashes as soon as i reach the top with the mouse at the line:
if (mouse.IsButtonDown(i)) {
and explanation: IsButtonDown only works with eMouseLeft and eMouseRight
fixed this error with
while (i < eMouseRight) {
but now right clicking doesn't deselect the item anymore in the InventoryWindow. :/
Regarding your last paragraph: you answered this yourself. AGS calls on_event after the mouse button was released, so it doesn't make sense to use mouse.IsButtonDown().
Now:
Like I said, on_event is called by AGS (specifically: its internal main loop which we can't see).
I used void because neither we nor AGS needs the return value; we couldn't store it anyway since we don't call on_event, AGS does.
Quoteso it would work, too, if we did it like this and set the number of the inventory gui as int data ?
function on_event(EventType eEventGUIMouseUP, int data) {
if (GUIControl.GetAtScreenXY(mouse.x, mouse.y) == invCustomInv && player.ActiveInventory != null) player.ActiveInventory = null;
}
No, not at all. I'm fairly sure this wouldn't even compile (it actually would since you wrote UP, not Up, but that's beside the point).
Plus, if it were done that way I'd need a separate function for every event which is impossible since they all are supposed to be called on_event and you can't have more then one function with the same name.
In a default game, gInventory's ID is 2. Looking at the event enum order, eEventGUIMouseUp is 5.
So what happens is if I release a mouse button with the mouse over gInventory, AGS calls
on_event(5, 2);Thus I need to check the value of the parameters inside on_event to determine which event was triggered.
If I define the function like this:
void on_event(int blah, int bleh) { ... }
blah holds the event value and I must compare it to eEventMouseGUIUp to find out if it actually was that event that triggered the call of on_event.
I know this can be difficult at first to understand, it's a bit backwards from what we usually do when using custom functions.
The principle is the same as on_mouse_click though; with that we check button's value to find out which button was pressed.
Regarding your second post:
Always post the exact full error message.
I can't replicate the crash, btw.
have to go over your last post again tomorrow.. didn't get all of it this evening ;))
about the crash:
IsButtonDown only works with eMouseLeft and eMouseRight
was the full error message (little yellow popup box)
there was nothing more. how can it run with eMoueMiddle in your script if i get an error telling me that i can't use eMouseMiddle with IsButtonDown ?
Which version of AGS are you using?
To quote 3.2.1's manual:
QuoteTests whether the user has the specified mouse button down. BUTTON must either be eMouseLeft, eMouseRight or eMouseMiddle.
I checked the manuals and it looks like mouse.IsButtonDown didn't support eMouseMiddle until 3.2. Either replace eMouseMiddle with eMouseRight or switch to the most recent version.
oh, that would explain it.
thanks for looking that up.
i downloaded the only version on the main page that is available, and that is 3.1.2.82
http://www.adventuregamestudio.co.uk/acdload.htm
http://www.adventuregamestudio.co.uk/AGS-3.1.2-SP1.rar
where can i get a newer version ?
http://www.adventuregamestudio.co.uk/yabb/index.php?topic=43214.0
Direct link: http://www.adventuregamestudio.co.uk/AGS-3.2.1.exe
thx matti, will try it with the new version now..
and besides.. i found the error why it didn't work yesterday, even with the 3.1 version.
i used i<mouseRight instead of i<=mouseRight..
it should work now.. i'll post it when i installed the new version.
is there a zipped version of ags.3.2.1 ?
(edit: looked through the thread, seems there is none)
i can't install .exe installers here at work. :/
can't extract from the .exe with winrar or uniextract either.. :/
will have to install it at home tonight and make a zipped archive for work for tomorrow and use 3.1.2 for today.
happiness! :)
just entered the changed code with eMouseRight for 3.1.2 and it works now.
so, until i won't have any errors with combining objects in the future, this left/right interface is DONE !
you are really cool people here.
i never really got that much help in any other forum so far with special codings, that really worked.
i hope i don't get into more trouble, soon :)
thanks a lot for your help so far!!!
will definately add khris in the credits for additional scripting.
Then just modify your first post by putting a (SOLVED) in the title and you're done :)
done ;)