Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Messages - morganw

Pages: [1] 2 3 ... 19
Site & Forum Reports / Re: Bug reports
« on: 11 Jan 2019, 22:09 »

Database query F.9.1 error: Unknown column 'multiple_winners' in 'where clause'

Site & Forum Reports / Re: Bug reports
« on: 06 Jan 2019, 14:19 »
When trying to edit this page:

I got this:
Quote from: Internal error
[104536ca1a6d4a8a8ff0c1e6] /w/index.php?title=Keyword:_attribute&action=edit Error from line 489 of /home/ags/html/w/extensions/ConfirmEdit/SimpleCaptcha/Captcha.php: Class 'CaptchaTriggers' not found


#0 /home/ags/html/w/extensions/ConfirmEdit/SimpleCaptcha/Captcha.php(554): SimpleCaptcha->triggersCaptcha(string, Title)
#1 /home/ags/html/w/extensions/ConfirmEdit/SimpleCaptcha/Captcha.php(214): SimpleCaptcha->shouldCheck(WikiPage, string, string, RequestContext)
#2 /home/ags/html/w/extensions/ConfirmEdit/includes/ConfirmEditHooks.php(62): SimpleCaptcha->editShowCaptcha(EditPage)
#3 /home/ags/html/w/includes/Hooks.php(177): ConfirmEditHooks::confirmEditPage(EditPage, array, integer)
#4 /home/ags/html/w/includes/Hooks.php(205): Hooks::callHook(string, array, array, NULL)
#5 /home/ags/html/w/includes/EditPage.php(4346): Hooks::run(string, array)
#6 /home/ags/html/w/includes/EditPage.php(3633): EditPage->getEditButtons(integer)
#7 /home/ags/html/w/includes/EditPage.php(2881): EditPage->showStandardInputs()
#8 /home/ags/html/w/includes/EditPage.php(674): EditPage->showEditForm()
#9 /home/ags/html/w/includes/actions/EditAction.php(60): EditPage->edit()
#10 /home/ags/html/w/includes/MediaWiki.php(500): EditAction->show()
#11 /home/ags/html/w/includes/MediaWiki.php(294): MediaWiki->performAction(Article, Title)
#12 /home/ags/html/w/includes/MediaWiki.php(861): MediaWiki->performRequest()
#13 /home/ags/html/w/includes/MediaWiki.php(524): MediaWiki->main()
#14 /home/ags/html/w/index.php(42): MediaWiki->run()
#15 {main}

Thank you for testing this, eri0o.

I like the new progress bar addition, I think previously AGS just stood there unresponsive, in a folder with too many sprites, this is nice.
To be honest, it was more a debug tool that was left in. It turns out that majority time whilst the Editor was in hung state was spent modifying the GUI control in a loop, and nothing to do with the import actions at all. This should be fixed now, so you should see a massive performance increase as well as the progress bar.

On the tiled sprite import, one minor thing, it loads with a number in x,y position, I think the default should be 0,0 (imagining I have a single sheet png, with each images of the same size).
I think you are right, and just leaving it on 0,0 makes more sense in practice. I'll change it.

The is an option to copy a sprite to the clipboard on the sprite navigator, I don't know if that was there before, but when I click, it does nothing.
I don't think this was modified, but it doesn't seem to work for me either, so I'll have a look.

Feature requests for the sprite GUI!:

- I have Aseprite triggering as my external editor, and it opens lightning fast, but a way to view and zoom a imported sprite, in AGS, would be cool.
- sprite GUI, has all things available through the right click on white space, adding a small bar on top of the GUI, with the same functions, would easier. I prefer inside the tab instead of the main toolbar like the rest of AGS, but both would work - one favor low resolution monitor and the other bigger resolution monitors.
- totally new feature: import folder -> would import a folder with pngs, and if a folder with png is inside that folder, recreate the folder structure inside AGS. I think is unneeded as project normally evolve slowly but could enable really fast use of ready made graphics from graphic asset packages.
Personally, I'm still aiming for just having sprites on the disk, and 'importing' is just defining the import options for each image. So I would hope that the final result would just be a 'project browser' instead of a 'sprite manager', and you could choose some action on any type of file or folder, or hand-off to any external program. I think the toolbar has a lot of issues anyway, in that things magically appear there depending on what you are editing (since they also include the paint controls), and it contains functions that aren't available in any other place (probably makes sense for choosing a paint brush, but not for mask import/export).

Script Compatibility seem kinda broken since BASS template doesn't work anymore.
I tried the one in the archive and it seemed to work. If it was an error for 'ProcessClick' it could have been an older copy of the template that hadn't had the fixes made. I think the plan is to release the final version of 3.5 with the templates from here.

Engine Development / Re: Switch?
« on: 21 Dec 2018, 21:54 »
Given that:
Quote from: License.txt
"Copyright Holder" means the copyright holders listed in the file Copyright.txt
Quote from: Copyright.txt
Copyright (c) 1999-2011 Chris Jones and 2011-2018 various contributors
...it doesn't seem entirely clear who be defined as 'Copyright Holder' in Artistic License 2.0. Just reading it from a layman's perspective I think you would be okay to distribute compiled versions based on the text in Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source as long as you documented the differences (from an external perspective, so keep your code private) and renamed all references of AGS to something else (so you are complying with option b in section 4):
4(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version.
That said, I imagine the preferable solution of the original project would probably be to take changes to make the engine backend agnostic, and just declare an interface that anyone could use to add additional platform support. 'Extending' AGS this way would likely fall under Items That are Not Considered Part of a Modified Version and so you wouldn't have to comply with any of the restrictions. How feasible this approach is would be questionable; I imagine it would be significantly more work, but potentially each side of the interface could be funded separately if there was someone else with a commercial interest.

Note: the above is just my personal opinion

Do the AudioClips for the music have their type set to music, either directly or by their folder?

I've tried it and it seemed to work okay, but the value will initialise to 0 and you didn't show how you are assigning any other value.
I think the problem is probably where you are assigning the value, rather than in the bits you have shown.

Depends what you are syncing the audio with, I mean that the loop can potentially end early as well as never end.
I did preface this with "generic solution" (for people searching for how to implement this in their game) because this has edge cases, as well as a missing null check on the channel.

How does it decide on whether application needs it or not? Maybe there is a way to integrate some info into executable?
I think this is the relevant info: https://docs.microsoft.com/en-gb/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

Or would you just recommend just setting it to 'Scaling performed by: Application' before deploying the game?
I doubt this would work, it probably wrote a setting to the registry on your computer and didn't modify anything to do with the game.

Unless it is related to whether you start the game with winsetup or not, I think it is likely that either the OpenGL implementation for AGS or the OpenGL driver is not doing something it should, but even if there were no issues in testing I think you'd be better releasing  your game with the option set to Direct3D. I think other than one round of bad Windows 10 updates, Direct3D is the most compatible choice, and stuff like Surface tablets have previously been launched with completely broken OpenGL support.

If looking for a more generic solution, I think you should be careful of blocking against an AudioChannel without any checks on it (it might get something else played on it unless you are sure nothing else could hijack it with a high priority, or just use it directly). Depending on the format and how you want to handle playback stopping early, it might be safer to read the duration immediately after playback starts (incorporating a null check for people who have the audio turned off) and then block against the duration instead of the actual playback.

Okay, I did check it before I posted it but if you need to store the choices the above way wouldn't work.

Try this instead:
Code: Adventure Game Studio
  1. readonly int EXPECTATION_COUNT = 10;
  3. String[] GetEditorExpectations(int count)
  4. {
  5.   String expectations[] = new String[EXPECTATION_COUNT];
  7.   expectations[0] = "Aggressive";
  8.   expectations[1] = "Emotional";
  9.   expectations[2] = "Fictional";
  10.   expectations[3] = "Friendly";
  11.   expectations[4] = "Informative";
  12.   expectations[5] = "Interesting";
  13.   expectations[6] = "Intrusive";
  14.   expectations[7] = "Personally Viewed";
  15.   expectations[8] = "Tabloid";
  16.   expectations[9] = "Thrilling";
  18.   String chosen[] = new String[count];
  20.   for (int i = 0; i < count; i ++)
  21.   {
  22.     int max = EXPECTATION_COUNT - 1 - i;
  24.     // pick a phrase
  25.     int pick = Random(max);
  26.     chosen[i] = expectations[pick];
  28.     // shift array elements
  29.     for (int j = pick; j < max; j ++)
  30.     {
  31.       expectations[j] = expectations[j + 1];
  32.     }
  33.   }
  35.   return chosen;
  36. }
  38. String GetExpectationsAsString(String expectations[], int max)
  39. {
  40.   String text = "";
  42.   for (int i = 1; i <= max; i ++)
  43.   {
  44.     // everything but the first phrase uses a separator
  45.     if (i > 1)
  46.     {
  47.       if (max > 2)
  48.       {
  49.         text = text.Append(",");
  50.       }
  52.       text = text.Append(" ");
  53.     }
  55.     // the final phrase also includes "and "
  56.     if (i == max && max != 1)
  57.     {
  58.       text = text.Append("and ");
  59.     }
  61.     text = text.Append(expectations[i - 1]);
  62.   }
  64.   return text;
  65. }
  67. function WhateverYourTriggerIs()
  68. {
  69.   // how many expectations to get
  70.   int choose = 3;
  71.   // store these somewhere for use later
  72.   String expectations[] = GetEditorExpectations(choose);
  73.   // get expectations as text
  74.   String text = GetExpectationsAsString(expectations, choose);
  76.   if (text != null)
  77.   {
  78.     String display = String.Format("The story is expected to be: %s", text);
  79.     Display(display);
  80.   }
  81. }

I imagine the goal of this is to pick 3 unique items from the array, so I thought I'd give it a try as there didn't seem to be an easy or obvious solution. Is there any better way than this, if the array values aren't used elsewhere?
Code: Adventure Game Studio
  1. readonly int EXPECTATION_COUNT = 10;
  3. String ChoosePhrase(String phrases[], int count, int current)
  4. {
  5.   String expectations = "";
  7.   // everything but the first phrase uses a separator
  8.   if (current > 1)
  9.   {
  10.     if (count > 2)
  11.     {
  12.       expectations = expectations.Append(",");
  13.     }
  15.     expectations = expectations.Append(" ");
  16.   }
  18.   // the final phrase also includes "and "
  19.   if (current == count && count != 1)
  20.   {
  21.     expectations = expectations.Append("and ");
  22.   }
  24.   // pick a phrase
  25.   int pick = Random(EXPECTATION_COUNT - current);
  26.   expectations = expectations.Append(phrases[pick]);
  28.   // if not done
  29.   if (current != count)
  30.   {
  31.     // shift array elements and choose again
  32.     for (int i = pick; i < EXPECTATION_COUNT - current; i ++)
  33.     {
  34.       phrases[i] = phrases[i + 1];
  35.     }
  37.     expectations = expectations.Append(ChoosePhrase(phrases, count, current + 1));
  38.   }
  40.   return expectations;
  41. }
  43. String GetEditorExpectations(int count)
  44. {
  45.   String interviewExpectations[];
  47.   interviewExpectations = new String[EXPECTATION_COUNT];
  48.   interviewExpectations[0] = "Aggressive";
  49.   interviewExpectations[1] = "Emotional";
  50.   interviewExpectations[2] = "Fictional";
  51.   interviewExpectations[3] = "Friendly";
  52.   interviewExpectations[4] = "Informative";
  53.   interviewExpectations[5] = "Interesting";
  54.   interviewExpectations[6] = "Intrusive";
  55.   interviewExpectations[7] = "Personally Viewed";
  56.   interviewExpectations[8] = "Tabloid";
  57.   interviewExpectations[9] = "Thrilling";
  59.   return ChoosePhrase(interviewExpectations, count, 1);
  60. }
  62. function WhateverYourTriggerIs()
  63. {
  64.   String expectations = GetEditorExpectations(3);
  66.   if (expectations != null)
  67.   {
  68.     String display = String.Format("The story is expected to be: %s", expectations);
  69.     Display(display);
  70.   }
  71. }

I manually added the line breaks, just to clarify where those came from.

One of people who cannot post, also cannot login without getting this:

They can refresh the page and get logged in (after seeing this message), but the message appears on every login.

People have asked me to post this, since they are having trouble posting anything (the message body was NOT empty):

Your String.Format is missing a token to say how to insert the text:
Code: Adventure Game Studio
  1. String.Format("The story is expected to be:",expectations);
Try this:
Code: Adventure Game Studio
  1. String.Format("The story is expected to be: %s", expectations);

The use of append is a little counter intuitive, since it returns a string rather than modifying the original.
So you would actually need something like this:
Code: Adventure Game Studio
  1. expectations = expectations.Append("Aggressive, ");

  • Creamy
  • Flugeldufel
  • Cassiebsg

Hints & Tips / Re: Blooded Fields
« on: 01 Dec 2018, 21:23 »
You need to
Spoiler: ShowHide
spy from outside

Engine Development / Re: AGS engine Mac OS X port
« on: 30 Nov 2018, 10:30 »
I did build them by switching from Xcode 10 to 9, and was looking at updating everything for Xcode 10. I think to make it work the minimum OS version needs to be raised to 10.9 though, as well as removing the 32 bit builds. I don't know what Apple developers normally do to keep the greatest level of compatibility, maybe 10.9 is the new baseline for everything.

Pages: [1] 2 3 ... 19