Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Monsieur OUXX

#581
I'm facing issues because the injection of dependencies makes some bits of code too abstract for me.
Let me explain what I'm failing to do :
- I want to load some XML files using a custom class of my making.
- For that, I need the Resource Loader (either the FileSystem one, or the other one)
- to get the actual instanciated object, I need the device instance
- All the device instances I see are int he factories, which are constructed automatically by the injection of dependencies (I guess! since I see their contructor get called nowhere in the code).
- But I don't want my class to be one of the built-in factories. I want it to be part of my custom library built on top of MonoAGS.

============

Also, pretty cool Facebook page : https://www.facebook.com/mono.ags
#582
Quote from: tzachs on Wed 09/05/2018 17:24:42
which browser and version are you using? any errors in the inspector?
IE11, in "non-Edge" mode. Pah, just ignore it, it's either my damn workplace firewall or that shit browser. That might explain how I knew that the articles exist while not being able to remember how I saw them earlier : probably because everything works as expected when I'm at home on Firefox.
#583
I'm very confused because none of the pages you mentionned have any links on the left, nor at the top, nor at the bottom. I only see the article. Maybe it's because they're iframes blocked by my current firewall at work (they have a very restrictive policy).

So anyways, don't spend any more time on that, it's not on you.

Spoiler


[close]

================

About repeatedlyExecute : the "warning" I was talking about is in AGSGame.cs :
Quote
177                 //Invoking repeatedly execute asynchronously, as if one subscriber is waiting on another subscriber the event will 
178                 //never get to it (for example: calling ChangeRoom from within RepeatedlyExecute calls StopWalking which 
179                 //waits for the walk to stop, only the walk also happens on RepeatedlyExecute and we'll hang.
180                 //Since we're running asynchronously, the next UpdateFrame will call RepeatedlyExecute for the walk cycle to stop itself and we're good.
181                 ///The downside of this approach is that we need to look out for re-entrancy issues.
182                 await Events.OnRepeatedlyExecute.InvokeAsync(_repeatArgs);

#584
My roadmap is as follows :
(IMPORTANT: I'm not trying to write a AGS-->MonoAGS converter, I'm just trying to have something that produces a basic game as fast as possible even without an actual Editor in MonoAGS)

1) I was going to write a small program that splits game.agf into xml fragments (definitions files) carefully organized into file-system subfolders, but then I got lazy when I realized that I have no idea how to read the acsripte file. So I got lazy and instead, for now, I'll export a game with the XAGE exporter plugin and see what files structure is produces. Maybe a combination of both methods. Anyway, for now, the quicker the better.
2) Write a few loader classes (factories, really) that load these XML fragments into configuration classes and then construct the corresponding classes (Character, Room, whatever).
3) Write a set of wrappers implementing ICharacter, IRoom, etc. that will perform the most basic initialization tasks (from the configuration files mentionned above), and, more interestingly, add a few overridable methods (the most obvious being : "RepeatedlyExecute") so that all a complete MonoAGS newbie has to do is to make their classes (Rooms, Characters, etc.) inherit from those classes. Then they will know instantly where to add custom code. I know it's not ideal (or possible) to make a MonoAGS game work exactly like an AGS game, but as I said the goal here is to have a prototype game as quickly as possible with as little hard-coded script as possible. From my perspective, the more code hidden under the hood (for a start), the better.

==========

Question 4: what core feature does not work in MonoAGS? Does save/load work? That's super duper important and that's the most difficult task. I would be pretty pissed off if I spent several months developing in MonoAGS only to realize that the difficulty of Save/load implementation was underestimated and the project stalled.

Question 5 : is there a more natural way of implementing "RepeatedlyExecute" than the one relying on recursive call (which is targetting specifially the splash screen, that is a room with very unstable framerate)? I've seen in one of the source files that you issue a warning about Repeatedly Execute, that might cause an infinite loop of calls/dependencies if not used properly. Can you produce a simple example of : a) such infinite loop issue, b) a proper way of doing things?
The naive, dirty approach that comes to mind would be for the scripter to define an arbitrarily stack storing the order in which to call the repeatedlyExecute method of each object, just like scripts in AGS can be moved up and down and that defines the order of execution.

=================

I would suggest to make the help articles (those ones : https://github.com/tzachshabtay/MonoAGS/tree/4f0189c1bebe15b4d36a0e8c34dea6c5f0120399/Docs/articles ) easier to find.
When you're here, you have no idea that they exist : https://github.com/tzachshabtay/MonoAGS/tree/4f0189c1bebe15b4d36a0e8c34dea6c5f0120399
When you're here, either : https://github.com/tzachshabtay/MonoAGS/blob/4f0189c1bebe15b4d36a0e8c34dea6c5f0120399/Docs/index.md
When you're here, you still don't know that they exist : https://tzachshabtay.github.io/MonoAGS/
And here either : https://github.com/tzachshabtay/MonoAGS/blob/4f0189c1bebe15b4d36a0e8c34dea6c5f0120399/Docs/articles/getting-started.md

I know I've stumbled upon a page where they were listed on the left, but I cannot find how to go back to that page.
#585
Thread hijack : I once went to a concerto where the artists duet was claiming to play some Bach. It was some sort of medley, or short pieces played one after the other.

Both musicians knew how to play several instruments, and depending on the pieces they were playing they were switching instruments. Most of the time one was playing the violin and the other one was playing the cello or the piano.

At some point, they played a piece involving bells (Nowadays I don't remember if they were actual bells or bells on a synth -- it doesn't matter). I recognized that tune : it's the tune played when Indiana Jones rides the camel in the desert, in Fate of Atlantis. When he's looking for the nazi digsite in Algeria.

https://www.youtube.com/watch?v=6u2u48MlA48


I've never managed to find that so-called Bach tune. So, I'm perplexed : is it just a hard-to-find Bach piece that was ripped by the LucasArts composer, OR is it the other way around: did the musicians sneak a rearranged videogame track into their little concerto?

There was no mistake, though. It was the same tune.
#586
Reviving this thread.

EDIT: scratch all that!
QuoteNow that there is some hype around MonoAGS, it's heart-breaking to see that XAGE is actually still around too. And that it's moving towards modern technologies. It still has its quirks here and there (see the end of that blog article) but overall, it can claim to be as worthy as MonoAGS. Clarvalon understands the .Net Core roadmap pretty well.

After several years, I'm realizing now that it's true that Clarvalon has always kept a somewhat low profile about XAGE. Therefore, I don't know if the moderate adoption of XAGE was a result of Clarvalon not being all in-your-face about it, or if it's just the result of bad luck -- XAGE being mistakenly only associated to XBox, or arriving "too early" when AGS 3.x was still riding the coolio wave.

XAGE is super mature (or is it not?). Proof: If I'm not mistaken, "Terror of the Vampire" was entirely ported to it.

Clarvalon, what are your thoughts about XAGE future?. I can see that you've definitely given it some thought. I'm asking because a lot has changed since your last post in January.

People, what are your thoughts on the whole XAGE/MonoAGS/AGS 5 topic? Wouldn't there be a way of getting the best of both worlds?

EDIT: Clarvalon is going semi-commercial with XAGE, and will be the main source of support for the users, so there is no real competition.


#587
I'm seeing interesting things in AGSSplashscreen.cs :

About Tweens :
Question 1 : If I understand the code correctly, you can have tweens that do not update automatically, but instead you let them give you a dummy function (_visitTween) when you create them, and then it's your responsibility to call that function whenever you want?
Question 2 : Is there a way to let the Tweens do their thing without having to call that function? (in a normal context where the game is not busy loading resources, like it's the case in the splash screen). I suppose yes, by calling "Run" instead of "RunWithExternalVisit".

About onRepeatedLyExecute :
I see that you actually call it yourself (insteads of letting the game engine do it automatically), by making the function call itself recursively every Task.Delay(5).
Question 3: Isn't there a risk that the recursive calls stack explodes after some time? Or am I being a dinosaur for even thinking that it's still (ever was) a thing?
#588
Quote from: Creamy on Wed 09/05/2018 10:31:31
QuoteI started writing a daily (hopefully) gamejam log at blog.tulevik.eu
It's a cool read.

+1 Really nice blog. And even if it wasn't nice, there are pretty pixel art pictures. One's gotta love pretty pixel art pictures.
#589
Quote from: Radiant on Tue 08/05/2018 18:37:32
Hmmm... this is really asking for an Indiana Rodent sequel :grin:

Don't. Just don't. I instantly want to do it/play it/join in. It hurts. :-D
#590
How about we start allowing games with MonoAGS (AGS 5) in every forum tat would normally only allow pure AGS games?

I'm lookin at you, MAGS.

If people started making small games using the new engine, it would:
- be an incentive to use it
PLUS
- it would slowly make some people acquire some knowledge about it. They would start being able to answer questions in the Technical forum and such. Buildibng the knowledge base, y'know.
PLUS
- the best way for the community to acknowledge its existence and slowly adopt it is to talk about it, and actually see it here and there. The good ol' visbility concept.
#591
Yup sorry : I updated my post since.

New question: how would I add a reference to a project present in a submodule? Do I add a reference to the Assembly, or do I add a reference to the Project (VS lets us do both)? In both cases, should I just browse to the corresponding submodule subfolder (and point to the .vsproj file in one case or .dll file in the other case)?
#592
Obsolete talk : @tzachs I did not create a remote repo since I cloned and branched from your repo. But since then I've changed strategy (with my own repo embedding MonoAGS as a submodule). In the future you should think of a way to allow contributions, though (EDIT: that you have already, when you explained how to do a pull request in your CONTRIBUTION file).

Up-to-date talk : @tzachs : I'm giving up on MyGet for now because it is out of my reach. I'm doing what CW suggested : a submodule. I've created two repos : one for FakeAGS (where I have a submodule to MonoAGS) and one for "DemoQuest2" (where I have two submodules : one to MonoAGS and one to FakeAGS -- side note: I don't know if it is necessary to have both or if MonoAGS is implicitly included when I include FakeAGS).
#593
That's pretty clear; even though each additional step from me actually starting to code makes me lose a little bit of steam ;) But that's not your problem, only mine.

Is there an easy way to create the submodule? First of all: should it be done on the github online gui or locally in my repo (with the .gitmodules file?). Then : how should I proceed? Create the subfolder first? Run a git command that actually does it?
#594
Quote from: Crimson Wizard on Tue 08/05/2018 01:47:38
I feel like this is rather a question of using VS.
Yes and no. It is, because for some reson the "build manager" had disappeared from the VS GUI until I managed to build the solution at least once. It was making me very confused.
So now that it's back, I can enable or disable the building of individual projects inside the solution. that's where my understanding of MonoAGS was insufficient. I wasn't sure if MonoAGS was referenced in the game as a separate, pre-built DLL, or if the game was built directly on top of MonoAGS (the whole thing being built as a single project). Now it seems obvious but yesterday it was way past midnight (roll)



Quote from: Crimson Wizard on Tue 08/05/2018 01:47:38
Did not understand the part about "MyHub's auto build and push", probably that has something to do with NuGet?
Yes. The whole purpose of NuGet is that it connects to your GitHub sources and builds the DLL project by itself, making it available online. then on the other end you have another project that needs that DLL, but instead of being physically present and referenced in your project, you reference a "NuGet" package that gets re-downloaded when needed (when the DLL has been modified). You can see it as a DLL being hosted in the cloud.


Quote from: Crimson Wizard on Tue 08/05/2018 01:47:38
If I understood correctly, what you are going to do is not supposed to become a part of MonoAGS source,
yes because I feel like its lifespan will be short (until the rest of MonoAGS arrives) and that its coding quality will not meet the standards of MonoAGS.

Quote from: Crimson Wizard on Tue 08/05/2018 01:47:38
In such case the best way IMHO is to create a new blank repository for your project, and include MonoAGS source as submodule.
Yes, now that I understand that MonoAGS is just a DLL, that's the way to go. Or at least, it should be when MonoAGS becomes stable.
I'm still hesitating because part of my work will be to extract hard-coded things from the demo game and turn them into some sort of generic library to simplify some tasks, and I feel like tzachs might want to get some of that back for MonoAGS. If it's a separate repo, it might be a pain to recover and integrate that code. Damn.

I didn't know about submodules though. I'll read more about them. Maybe they're the solution to my questionnings. Thanks!
#595
I've created my new local branch but I fail to publish it to the remote repo. I'm only offered to "push" it and even then I get this :
QuoteError encountered while pushing branch to the remote repository: Git failed with a fatal error.
fatal: Could not read from remote repository.
It used to prompt me for my github credentials but now it doesn't anymore. I'm not sure if it's because they're accepted (and cached somewhere) and the problem comes after, or if that's the problem.
I've tried to do the push using the git command line but I cannot make heads or tails of all that command line crap (I make nightmares where Unix laughs at me because I'm not wearing pants). I can't even go past the simple line git remote set-url origin username:password@github.com/tzachshabtay/MonoAGS.git as shown here. It tells me that it's not a valid git location. I don't know if/where I should put https.

==========

In the meatime I'm adding my "middleware" library project to the solution. I've first had to install the ".Net Core templates" extension to my VS 2017 Community I had to go to the Visual Studio Installer and check ".Net Core Cross platform workload". Then I've added a ".Net Core library" project tot he solution. I've decided to call it "FakeAGS" :=

I'm in the process of creating the feed : https://www.myget.org/feed/Packages/fakeags
I'm reading this : https://weblogs.asp.net/bsimser/automatically-publishing-nuget-packages-from-github

What's annoying me right now is a design question : I'd like to keep my "FakeAGS" in the MonoAGS solution, to benefit from neighbour sources/autocompletion and easy testing, but if I understand correctly it has to be in an entirely different solution/repo to benefit from MyHub's auto build and push. Correct?

==============

I want to create a copy of "Demo" to create a variation of it for my own test purposes. I don't understand if that's the right way to do. After I copy and paste the "Demo" folder and its contents, and rename that copy "Demo2", Visual Studio seems to ignore it. How am I supposed to proceed anyway? Is it like "one instance of MonoAGS = one game" or "one instance of MonoAGS = several potential games"?

==============

EDIT : this bit solved. Since I didn't find how to simply force a Restore Packages, I closed the solution, deleted the .nuget folder, then re-opened it. Then I got the migration report, where, without surprise, the mobile projects were not imported properly (no Xamarin). I cleaned the solution and rebuilt it. It worked.
Quote
Is it absolutely necessary to build the mobile versions every time? Here is why I'm asking: I don't know how I've done it, but yesterday I've managed to build and run the desktop version without having Xamarin installed. But today I do a rebuild and it won't restore the packages unless the Android project builds properly (therefore, the build fails). And for that, I would need Xamarin. So I'm trying to exclude the Android project from the build, but... I'm totally lost : where has the Configuration Manager gone? What the hell is that new "configure tasks" bullshit? ;-D
Spoiler

Code: ags

1>------ Build started: Project: AGS.API, Configuration: Debug|AnyCPU ------
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\AGS.API\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(167,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\AGS.API\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
2>------ Build started: Project: AGS.Engine, Configuration: Debug|AnyCPU ------
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(167,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
3>------ Build started: Project: AGS.Engine.Desktop, Configuration: Debug|AnyCPU ------
4>------ Build started: Project: AGS.Editor, Configuration: Debug|AnyCPU ------
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Editor\AGS.Editor\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(167,5): error : Assets file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Editor\AGS.Editor\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Autofac". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\AGS.API\bin\Debug\netstandard2.0\AGS.API.dll' could not be found
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine\bin\Debug\netstandard2.0\AGS.Engine.dll' could not be found
5>------ Build started: Project: DemoQuest.Desktop, Configuration: Debug|AnyCPU ------
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "GuiLabs.Undo". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Demo\DemoQuest.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\AGS.API\bin\Debug\netstandard2.0\AGS.API.dll' could not be found
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Demo\DemoQuest.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Editor\AGS.Editor\bin\Debug\netstandard2.0\AGS.Editor.dll' could not be found
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Demo\DemoQuest.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine.Desktop\bin\Debug\AGS.Engine.Desktop.dll' could not be found
F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Demo\DemoQuest.Desktop\CSC : error CS0006: Metadata file 'F:\Users\GQHH9006\Mes Documents\Mes textes\prog\MonoAGS_git\Source\Engine\AGS.Engine\bin\Debug\netstandard2.0\AGS.Engine.dll' could not be found
========== Build: 0 succeeded, 5 failed, 0 up-to-date, 0 skipped ==========

[close]
#596
Quote from: tzachs on Mon 07/05/2018 15:38:42
To point visual studio to that channel...
To push a package to the channel...
I don't have a perfect understanding of the packages workflow.
What i I want to  maintain a package? Do I need to have a code repo that builds the latest sources and pushes them onto the channel... and then on the other end I've got the code repo of my project that pulls the channel whenever there is an update?
#597
About the wiki page : I'm all in favor of a shared doc. CW has indeed noticed that I started writing tips in my very first post, buta shared document directly on the MonoAGS site is the best imo.

About the need of installing external packages : I wouldn't worry too much about that. We already had an extensive discussion (interrogation ;) ) with tzachs in another thread, and I'd say he has it rather well planned out -- provided he doesn't lose steam on the way to converting to .Net Core. In the future there should be a module testing that the requirements are present (maybe a pre-build script?), but for now it's not too tricky.

About the code that needs to be manually written and the absence of actual puzzles in the demo : maybe we should start a shared repository where we'd code some sort of basic middleware engine (a template, really) to make it easier to start a game with MonoAGS. Something that fills the current gaps until they're properly implemented by tzachs. Something as close as possible to an AGS game structre -- with comments in the code telling you where to insert code for this and that.
Maybe a NuGet package? So that the thingy can be recompiled by the maintainer(s) and then re-imported on the fly by all the people who use it?

EDIT : about that last point of starting to split optional game features into more readable and re-useable modules, I've got the perfect example : Demoquest is literally a Sierra template, which in turn uses the "Rotating Cursor" concept (right-click iterates through cursors). But that concept is also used by ... Sam&Max. We can clearly see how some game features could be enabled or disabled, and their generic code could be easily initialized from just a few parameters (in the case of cursors : the file containing the list of icon files of each cursor mode, and the text associated to each action).
So I'd suggest creating a separate library project in the solution with those features (the first of them being "rotating cursor", but I can give more examples : "scrolling inventory"). This library could then be included in each template (Sierra, 9-verb...).


EDIT 2 : On a different note: code-wise, how do you plan on binding an event function (such as : button.OnMouseClick(() => { .../* DO THINGS */ } ) ) from the in-game GUI? I have no trouble believing that the AGS Editor can simply insert some function name in game.agf and simultaneously insert an empty function with the same name in a game script file. It happens while the game is not running. But with Visual Studio, while the .exe is running, will that not be a bit tricky?

EDIT 3 : can you explain this piece of code
Spoiler

In Rooms.cs :
Code: ags

   EmptyStreet = Task.FromResult(Find(state, EmptyStreet.Result)); 


- I don't understand how EmptyStreet is populated after game gets loaded (in other words : how EmptyStreet is not null at the time "onSaveGameLoaded" gts called).
- I don't understand what is ".Result". Is it an "out" variable were find stores its result?
- More generally I don't understand the whole sequence.
    - Where does "Task" come from?
    - What's oldID versus ID? I'm guessing these are the IDs befaore/after load, but then again I fail to visualize the sequence of calls.
[close]
#598
@Crimson Wizard or others : how ae sprite resources loaded in AGS? For example, will the loop sprites of a view be loaded when I set the view to the character? Will the objects and background sprites be loaded when I enter the room?
#599
Quote from: Narehop on Wed 02/05/2018 21:15:24
So let's say that... Any pirate game is a Monkey Island?

Anything remotely pirate-y is a Monkey Island. Monkey Island is the light. Monkey Island is the truth.
#600
Yes. Your working is amazing. Now you must finish this game (allow me to insist (roll) ), for two reasons : 1) so that the world can enjoy playing it, and 2) so that you can kick the "Night of the meteor" team in the butt with your art, for them to finish their project. (laugh)
SMF spam blocked by CleanTalk