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

Topics - monkey0506

#41
Hey folks. I'm developing some standalone Android versions of AGS games to be published in the Google Play store. While I sort out the details of the process, I need testers. Currently I'm targeting Android 2.3 and higher (not sure? Go to Settings -> About phone, and check the device firmware version), but I personally only have access to Android 1.6, 2.1, and 4.0+ devices. I'd like to eventually get it working on all my devices, but there are some technical reasons why I'm shooting for 2.3 right now.

I have already confirmed on a few 4.0+ devices that everything is pretty much working the way I need it to, but my lower-end, older devices aren't making the cut. I'm pretty sure that 2.3 should be functional though, without excluding too many people (Gingerbread (2.3) was released in 2010, so it's highly likely most Android users have at least that by now).

If you have a device and are interested in helping me test this, please PM me your Google account details. I will let you know more.

P.S. I'm posting this here because I feel like releasing standalone AGS games in the Google Play store is a big step forward for the engine. I did, in fact, commit some relevant changes to the current master branch on GitHub, and other revisions may come up.
#42
Call it what you will, but AGS needs proper reference types. We need to be able to pass them as parameters to our functions and return them, we need to be able to store them inside of other structs, we need to be able to create dynamic arrays of them. This is not a question of whether we should abandon AGScript, and if it turns into a debate about it I swear I'll make the mods lock it... (laugh) (roll)

Really though, it's not just about the suggestion either though. We've heard it, we've seen it, we've been through it, and we're still right where we are. So, if I'm not just whining, what the hell am I posting for?

I want people to read this. I want them to understand it. I want them to understand that it's not as good or as easy to implement as proper reference types, but I want them to come to realize that once implemented it is in every way as functional as proper reference types would be (down to a few CPU clock cycles, but the function overhead might balance out against the actual dereferencing, I dunno). I want people to know that this is possible to achieve. The core implementation is bulky, I'll give you that, but the people who really need it are the ones designing RPGs and FPSes and RTSes in AGS anyway. Their code is already bulky. And I'd wager that whatever method they've come up with to workaround the issue that doesn't do exactly this is either at least as bulky (if not more) or it is significantly less efficient (or more probably both).

I want to have an intelligent and open discussion about it. Not a debate about whether AGScript is crap. Not read through two dozen people posting, "but it's still a workaround". But an actual discussion. So... Anybody willing to take a look? I mean, it can't be worse than what you're already doing anyway. And it doesn't involve putting everything into strings.

[/totally shameless plug]
#43
Quote from: Snarky on Thu 18/07/2013 10:45:25
Another bug. This one crashes the editor (well, it keeps running, but I can't save the project, it just makes it crash again):

Spoiler


QuoteError: Index was outside the bounds of the array.
Version: AGS 3.3.0.1140

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at AGS.CScript.Compiler.FastString.get_Item(Int32 index)
   at AGS.Editor.AutoComplete.AdjustFunctionListForExtenderFunction(List`1 structs, List`1& functionList, FastString& script)
   at AGS.Editor.AutoComplete.ConstructCache(Script scriptToCache, Boolean isBackgroundThread)
   at AGS.Editor.ScriptEditor.scintilla_OnBeforeShowingAutoComplete(Object sender, EventArgs e)
   at AGS.Editor.ScintillaWrapper.ShowAutoComplete(Int32 charsTyped, String autoCompleteList)
   at AGS.Editor.ScintillaWrapper.ShowAutoCompleteIfAppropriate(Int32 minimumLength)
   at AGS.Editor.ScintillaWrapper.OnUpdateUI(Object sender, EventArgs e)
   at Scintilla.ScintillaControl.DispatchScintillaEvent(SCNotification notification)
   at Scintilla.ScintillaControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[close]

Happens as I'm trying to type "(this Dialog*)" after entering the first three letters "Dia" (though in the screenshot I had time to add a typo). Even if I close the editor, restart, and try again, it still crashes. Perhaps the project is corrupted? Here it is in case it's needed for examination: https://www.dropbox.com/s/2uy1xb3u5bn0z8q/testcursor-crash.rar

Obviously the crash should be looked into, but for what you're doing there may be a better way. Are you using the custom dialog options rendering methods, or just using the built-in rendering? If you're using the custom functions then you can use dialog_options_get_dimensions as a form of "dialog_start" and repeatedly_execute as a form of "dialog_end". If you have nested/branching dialogs then you could even reliably use dialog_options_get_active as a form of "dialog_repeatedly_execute" to update the actively "running"/visible dialog.

If you're using the built-in methods none of this applies, but it could be some food for thought (and it would save you having to remember to call your custom "StartTracked" method instead of the built-in "Start").

Weird bug though.
#44
In response to this recent thread, I decided to take a quick glance in the engine source to see what is actually going on when you click on a GUI/GUIControl, and I found this function (../Engine/ac/gui.cpp, Line 247):

Code: cpp
void process_interface_click(int ifce, int btn, int mbut) {
    if (btn < 0) {
        // click on GUI background
        gameinst->RunTextScript2IParam(guis[ifce].clickEventHandler,
            RuntimeScriptValue().SetDynamicObject(&scrGui[ifce], &ccDynamicGUI),
            RuntimeScriptValue().SetInt32(mbut));
        return;
    }

    int btype=(guis[ifce].objrefptr[btn] >> 16) & 0x000ffff;
    int rtype=0,rdata;
    if (btype==GOBJ_BUTTON) {
        GUIButton*gbuto=(GUIButton*)guis[ifce].objs[btn];
        rtype=gbuto->leftclick;
        rdata=gbuto->lclickdata;
    }
    else if ((btype==GOBJ_SLIDER) || (btype == GOBJ_TEXTBOX) || (btype == GOBJ_LISTBOX))
        rtype = IBACT_SCRIPT;
    else quit("unknown GUI object triggered process_interface");

    if (rtype==0) ;
    else if (rtype==IBACT_SETMODE)
        set_cursor_mode(rdata);
    else if (rtype==IBACT_SCRIPT) {
        GUIObject *theObj = guis[ifce].objs[btn];
        // if the object has a special handler script then run it;
        // otherwise, run interface_click
        if ((theObj->GetNumEvents() > 0) &&
            (theObj->eventHandlers[0][0] != 0) &&
            (!gameinst->GetSymbolAddress(theObj->eventHandlers[0]).IsNull())) {
                // control-specific event handler
                if (strchr(theObj->GetEventArgs(0), ',') != NULL)
                    gameinst->RunTextScript2IParam(theObj->eventHandlers[0],
                        RuntimeScriptValue().SetDynamicObject(theObj, &ccDynamicGUIObject),
                        RuntimeScriptValue().SetInt32(mbut));
                else
                    gameinst->RunTextScriptIParam(theObj->eventHandlers[0],
                        RuntimeScriptValue().SetDynamicObject(theObj, &ccDynamicGUIObject));
        }
        else
            gameinst->RunTextScript2IParam("interface_click",
                RuntimeScriptValue().SetInt32(ifce),
                RuntimeScriptValue().SetInt32(btn));
    }
}


This seems relatively straightforward enough. I actually got called into work early today (just waiting on clothes to dry), but I'm curious how difficult it would be to provide methods such as GUI.ProcessClick and Button.ProcessClick which would in turn place calls into this method. I honestly haven't made any serious attempt at modifying the engine source directly, but am I wrong in thinking that this would be an extremely simple thing to implement?
#45
It's not exactly "original", but there is a school of thought that true objectivity can never truly exist. As human beings it is in our nature to allow our emotions and past experience to influence our thinking. This makes objectivity seem like an unobtainable goal.

Seeing as the discussion is going in that direction anyway, we may as well make this about religion. If someone (read as: me) was raised in a home with general Christian beliefs, is it possible for them to make an objective decision in favor of Christian beliefs? Or would the only truly objective decision be to abandon the traditions and turn to atheism or perhaps another religion? Of course there's also the possibility that you're all going to say no one could objectively choose religion to begin with, but that would be to entirely discount personal experience. What, personal experience can't be objective? Wouldn't that mean that all observation and scientific research is completely bunk anyway?

Well, guess I'd better stick to religion then.
#46
I've recently found that if an animated GIF is loaded and I go do something in another tab, the tab with the animated GIF freezes when I return to it. I have noticed this repeatedly because my avatar has a random chance of being an animated GIF and not a static PNG.

The exact circumstances in which I have been able to replicate this:

- Load a page with an animated GIF (e.g., refresh this page until my avatar catches on fire)
- Open another tab, and browse the web on it for at least 2-3 minutes, loading new pages, images, etc.
- Switch back to the original tab

Is anyone else able to replicate this? It's rather frustrating... I tried searching for information on it, but just found a bug listing from 5 years ago, and people talking about various other (unrelated) issues Chrome has with animated GIFs. Maybe it's time I finally sort out how to adopt the aPNG format and abandon animated GIFs altogether.
#47
I have been immature and irresponsible around the forums lately. In some way, I've done it intentionally to help myself reach the decisions that I need to make.

I don't mean to make excuses. I'm not upset at anyone here. No one has done anything wrong for me to be upset about. I don't hold any hard feelings. I did, but... It's in the past.

Well, I guess what I'm trying to say is pretty much summed up here:

https://sites.google.com/site/monkey0506/home

I went through my site on X10Hosting.com, my Google sites, and my local HDD to compile the list of files. I sincerely hope that it helps, and if it doesn't, well it was a fun ride anyway. :)

I apologize that I cannot be responsible enough to update my own links, but if anyone sees links to any of these files go dead, please refer to this link. Also, if it's not on this link then I don't have a current copy of it (except the IWWHIIWWHI... game and the OSD-OCD source, both of which are too large to upload to Google).

Thanks for reading. I'll be back, eventually. :)

-monkey
#48
The Rumpus Room / Everything pisses me off.
Sat 23/02/2013 09:29:05
Wouldn't it be nice if you could create an adventure game which you could play in the comfort of your own home on your PC, while waiting at a doctor's office on your Android phone, and while sitting on the toilet with your iPad? And you could even share your save game files between devices?

Thanks to JJS you can do that.

But, adventure games that are designed for PC generally aren't designed with those touch-screen thingies in mind. The interfaces are often awkward (or sometimes downright "impossible*") to handle when they were "made for PC".

Wouldn't it be amazing if you, as the developer, could design your game to fit the needs of the player? The needs of the PC player, the mobile device player, and the tablet device player can vary drastically. So how could one possibly appeal to everyone? You can't! :D

What could be done is that with a single line of code, the interface could be swapped out just-in-time to fit the user's needs. If the player is on a mobile device, you could load your touch-centric interface, while if they're back on the trusty old Compy 386 you could load your full, robust interface using the F-buttons and such.

That sounds terribly complicated and difficult, having to design multiple interfaces, and then make sure they don't interfere with each other. The truth of the matter is, designing multiple interfaces with these portability needs in mind is actually much simpler even than creating a single static interface from scratch.

Fortunately for you, however, everything here pisses me off. So I won't keep rambling.

*DISCLAIMER: Nothing is impossible.1

1DISCLAIMER: It is, in fact, possible to accomplish nothing. Therefore, nothing is not actually impossible.
#49
The Rumpus Room / This seems legit.
Mon 18/02/2013 20:29:45
I'm posting this in the Rumpus Room simply because I'm on my phone and too lazy to make the post worthwhile.

For years (more than a decade) I have known with absolute certainty that I wanted to make a career out of game programming. I'm starting a new job, and I'm wondering if I should pursue a career in the field of mental health.

I'll see how I feel six months from now.
#50
General Discussion / Programmers: Why We Do.
Sat 05/01/2013 19:05:10
As I have developed my skill as a programmer, it has become increasingly apparent to me what an elitist group of prats that we all are. I can't really speak for everyone, but somewhere down the line it seems that I lost sight of why I ever started. As a child I grew up playing The Secret of Monkey Islandâ,,¢, which inspired me to want to make games. Over time that desire was pushed aside by my own selfishness, leading up to "My Christmas Gift".

Recently there has been a somewhat heated debate around JJS' repository between myself and another person, C vs. C++. Personally I find that C++ does in fact live up to its name, as a better version of C. This other person will swear under oath that anyone who uses C++ is nothing more than a troll. I have done some research, and virtually (heh, virtual) every benchmark I have seen shows that C++ is as fast or faster than C when running functionally similar code. I also came across a rant by Linus Torvalds (as Linux users would have it, the savior of the computing world) in which he spouts off how slow C++ is, how easily it lends itself to bad programming style, and how he would rather piss off a C++ programmer than have one work on a project with him.

I don't mean for this to turn into a language debate. We have enough of those going around...(roll) I make mention of it because it serves as a great example of how elitism can create rifts among us. I'm not immune, and I'll admit I'm even responsible.

What I'd really be interested to learn is why the programmers here have chosen to follow this path. I assume that for many of us the reasons will be similar, but that's exactly what I'd like to find out.

For me, I wanted to become a programmer so that I could learn how to make games like Monkey Island. In the early days of my membership in this community, I also grew to want to help others with their own programming efforts. It was fun and challenging for me, and it brought a sense of fulfillment. I'd like to find my way back to that.
#51
General Discussion / My Christmas Gift
Tue 25/12/2012 01:40:54
This is extremely pathetic, but after almost nine years of being one of the most active members of the scripting forums, I suppose that the community deserves an explanation. So Merry Christmas to all, because here we go.

When I first came to the Adventure Game Studio community as a "Guest" back in 2003, and finally a full-fledged member in the beginning of 2004, I came as many new members do. Utterly full of myself, overflowing with unbridled arrogance and bravado (and why shouldn't I have been? I was clearly destined to be the next Ron Gilbert) I entered the world of computer programming and fell flat on my face. After countless threads and an infinite amount of patience from the community, I slowly learned. I tore the SCUMM template of the time apart (although it occurs to me now that I can't even recall the name of the person to whom I owe so much, the author of that template). I could be horribly off on the timing (and I refuse to research it at this point), but I seem to recall spending about six months deconstructing the SCUMM template and building my own working copy. From there I spent an additional six months working on the dialog GUI - which is significant as it marks the first code I ever distributed to the AGS community (a scrolling dialog system, and they said it couldn't be done!).

With the advent of script modules with AGS 2.7, publishing the code in a portable fashion became much easier. I quickly released StrAdd (for "String Additions", now the StringPlus module) with some additional string manipulating functions. A proper scrolling dialog module became the bane of my AGS programming existence as I was never able to satisfactorily produce code that would scroll an option that spanned multiple lines. I view this as my greatest programming failure.

From there of course releasing modules just became my role in the community. It didn't matter if anyone wanted, needed, or even used them. They would be there, and I would be the one making them. I believe that to date I have released more script modules to this community than any other individual, but who's really counting? That's right, I am. Because I'm extremely egotistical.

I fear that my passion for making script modules, my obsession with publishing more of them than SSH (which I will now openly admit was a stated goal), it all may have done more to discredit me than to seal my claim to fame. Honestly, when I started it all, I had myself thoroughly convinced that all I wanted was to help the community - to pay back all the help that had been given to me. It became more than just giving back, it really began to define who I was in many ways. I suppose that it was this prideful supposition that the community relied on me - that you all counted on my help and my modules - this is what ultimately brought me to where I am now. I'm also extremely bitter about the Interfacer module.

More than just authoring module after module, I also took it upon myself to learn the capabilities of the engine. I found enjoyment in challenging those who said "it can't be done (at least not in AGS)". Like many others before me (and since) have done, I have contributed to the AGS program itself through my own efforts. The maximum length of a String that can be returned from String.Format was changed (and documented) because of testing that I was doing. The noloopcheck keyword was introduced because I provided a real-world rationale for needing more than 150,000 loop iterations without the game being hung. I'm not trying to brag, most of the changes I brought about have been small and largely insignificant to the majority of the users. From all this though, I gained a lot of insight into the way AGS was designed (structurally, not strictly speaking of anything relating to the source code), and even a glimpse into the mind of CJ himself. For every change that was brought into the engine or editor by me, there are probably 3 or 4 that were tossed out. I feel as though I had a keen understanding of the direction that CJ wanted to take the AGS program in.

So bringing us into the past couple of years, AGS development ground to a halt as CJ relinquished his reigns and inexplicably no one picked them up. As I'd been devoting the majority of my time to learning about AGS, my own C++ skill set was still limited to a novice level. I tried my best to make this clear as I asked question after question about the possibility of moving forward with AGS development. Eventually it seemed that things were being set in motion, that action was being taken. We had some provisional nominations, and we even elected a potential new project leader - only to have nothing done about it because our new motto had become, "One day, CJ might yet return - let's wait just one more day and see." The fact that I wasn't the one elected didn't thrill me (as the person in question, by their own admission, knows little about the program, where it's coming from, and where CJ would likely have taken it further), but I held my tongue (as he's a great guy, and I didn't want to be a sore loser about it). You can only hold your breath for so long before you have to admit that everyone else (don't get ahead of me! I'll come back to them) has quit playing hide and seek and gone inside for a warm glass of cocoa while you're still outside counting.

In all fairness, JJS has done an amazing job at picking up the role to help keep things organized and moving smoothly along. We now have ports of AGS to several platforms which were previously unsupported altogether... and, well. Yes, we have that.

If my arrogance has yet to offend you, I assure you there's more yet to come. Otherwise I would just remind you that this is my thread, so there.

In supposing that I could somehow be of some use, I made a few attempts at defining utility classes which could be generically employed, but I was surprised to find that C++11 is apparently against the rules (even though it would solve numerous problems while causing no difficulty or issues on the supported platforms, including newly ported ones). So my attempts at utility classes have proven to be a bust because frankly there is no acceptable excuse for not using C++11 in this project. In my hubris I'll even go so far as to say of the individual who has been submitting all the bug reports against JJS's repo and uploaded some source code written in C with a license precluding C++ usage - he is an idiot. We don't live in the 1960s, '70s, or even the '80s any more.

Practically everyone who writes code (from the newest novice to the most skilled programmer) is incompetent (myself included) in some regard, and I swear people go out of their way to make their code insufferably difficult to read. Unreadable code isn't just inconvenient - it is harder and perhaps even impossible to debug, all because the author is lazy.

All of this is dirt under the turnip, or whatever the phrase may be. I am where I am at this point.

By now you all must be thinking how highly I think of myself, which isn't at all true, but that's precisely the reason why it's so important for me to think so highly of myself as I don't, which is why I do. I haven't written this as a justification or rationale for why I feel the way I do, nor is it any longer about feeling sorry for myself (there was a time for that too), rather simply I intended to give full disclosure.

It's probably well deserved in the end. Time and again I have proven myself to be unreliable. Specifically there are some people that I have failed, resulting in negative public impact. I would like to apologize to those that I have let down, hurt, or otherwise offended. I won't try to make excuse for my behavior, because frankly I shouldn't have to. My actions should stand by their own merit, and mine simply don't pass the test. I have also let down the community by failing to fulfill the role I did take on in assisting with the AGS source code. I am sorry that I am too stubborn to even now try and correct that.

I feel that my time with AGS has by and large come to a close. I no longer feel that I am a necessary or even useful part of this community, as I once did. I won't say that I'll never come back around, but I feel as if the time has come for me to move on to the next chapter in my life, whatever or wherever that may be. I wish all of you well, and a Merry Christmas.

In short, I'm an attention seeking drama queen, so, goodbye.
#52
When I was younger, I really fit the part of "momma's boy", but as I've gotten older our relationship has undergone drastic changes. I tend to think of myself as a generally logical and rational person. I spend a lot of time contemplating my own actions, as well as the actions of others. I simply do not understand my mother. She has been divorced twice, and the boyfriend she has been living with for the last 3 years (who actually did propose to her 3 years ago) is fundamentally the same as the two men she's divorced before. Perhaps my mother thrives on being mistreated.

Her current boyfriend is different than my biological father and my step-father (the latter of which raised me from age 5) in one way though. He is obsessed with money-making schemes. He won't sell his thousands of comics (not an exaggeration, many most are in mint condition), and he quit his stable job (to be fair, he retired), but he will go and sell flags on the side of the street. More recently he has engaged my mother into a Multi-Level Marketing "business" (I'll withhold the name for damage control purposes). As with any MLM, there is a hefty fee for "signing up" followed by exceptionally high recurring monthly fees. This particular MLM is working under the ploy of selling discounted services, which of course are rarely (if ever) actually seen or utilized.

For nearly a year my mother has been hounding myself and my siblings, making absolutely sure to bring up this "company" in every single discussion, email, etc. My two younger sisters have actually been brought into the scheme by my mom, who is paying their fees (they have no other association with it; they don't actually care about this at all). Despite voicing our own concerns, my mom, largely reinforced by her boyfriend, continues to insist that there is nothing wrong with an MLM. She cites "companies" such as Amway and Mary Kay. It's funny that as successful as these MLMs all are that I've never heard of a single individual actually making substantial profit off of them.

I have tried everything I can think of to make it clear that she is alienating her own children. Every time I mention it, the entire discussion devolves into her simply "explaining" to me how this business is going to give her the financial stability to travel the world and leave an inheritance behind for all of us. My best efforts to explain the underlying fundamental problems of MLMs have failed me. So, I'm turning to you AGSers. Help? Advice?

I also tried referring my mom to read this article about the issues behind the MLM structure... She blatantly disregarded it, without even reading. :/
#53
Hey folks,

Some of you are already aware, but I'm starting to take some college classes, and for my Intro to Game Development class I have been assigned to create a survey (10 questions) to try and gather some basic demographic data. Please take my survey and help me out!

Thanks!

Any feedback on the questions is appreciated too. I was limited to 10 questions, so I tried to be diverse while remaining relevant. :)
#54
kbai.
#55
As we're moving forward with more developers starting to get into the engine code, we need to define a well structured set of conventions which everyone can follow and conform to. This will promote consistent programming from anyone contributing to the source. I will include here a proposal for the AGS Engine Coding Conventions Draft 1.0. Anyone is free to voice their opinion about this proposal, and it will be modified according to popular trend. As a point of reference I have used the Google C++ Style Guide as well as ScummVM's Code Formatting Conventions and Coding Conventions, along with some personal preference.

For the sake of readability and making it easier to update, the AGS Engine Coding Conventions are now in the wiki. This should be considered the "official" draft/proposal (unless otherwise noted).

(Regarding updating, not only can other individuals not edit my posts of course, but also this post was dangerously close to the 30,001 character limit the forums have for a single post, and things were already having to be moved around...)
#56
I've never really been one for purchasing a lot of things (read as: anything) from iTunes, until I was looking around and found that at the time it was the only available way to legally purchase full episodes and seasons of a certain TV show that I watch. This was some time ago, and I do enjoy being able to pull up an episode and watch it at my leisure. There's some problems though...

The videos are DRM protected so that I can only watch them by using the iTunes software or an iDevice that is synched up to my account (of which I own exactly zero iDevices). Okay, fine, whatever. I already have the software installed anyway.

I also frequently use my roommate's computer (which is hooked to the TV in the living room), so I also downloaded my shows onto that computer (read as: I copied them with a thumb drive). When I loaded them on my roommate's computer, I got a message that I was now using 2 out of 5 authorized computers for viewing these videos. Hmm...that seems oddly restrictive if I have to sign into my iTunes account to allow them to play on that computer anyway...

Myself and my roommate also recently decided that the time had come to clean up our computers a bit, so I did a fresh install of Windows on both. Little did I know (and I was certainly not warned) that by not going into iTunes and selecting "Deauthorize this computer", I was opening up a whole other can of worms. When the systems were back up and running, and iTunes was reinstalled, the videos (which were on a separate hard drive) had to be authorized again. Okay, makes sense. "You are now using 3 [(and then 4)] of your 5 authorized devices for viewing this content." Wait, what the hell?!? This is the same physical computer, how the hell are you going to tell me just because I reinstalled Windows that I'm now using 4 of my 5 licenses between 2 physical systems?

When I went looking for it, iTunes does have published information on this, but again it's not something they go out of their way to make obvious if you're not already looking. They actually have a "Deauthorize all computers" button (which by the way, can only be used once a year!), so I was able to recover the 2 lost licenses, but it's still nonetheless aggravating to have been made to go looking for this information, and end up using my one chance for the next year to deauthorize all systems (I'd be in real trouble if anything happened to my laptop I suppose).

In light of all this, I thought it might be prudent to make a back-up of my shows (I had gone out of my way to legally purchase them, of course it would have been much easier and more convenient to do otherwise). In a recent review of the iTunes Store Terms and Conditions, they actually encourage you to back up your content, specifically including a disclaimer that at any time they may permanently remove the content from their store, and while you can still use it if you have it, if you lose it then they are not liable (which in itself is somewhat reasonable, think if Walmart offered replacement warranty on lost/scratched DVDs; of course then again, being a cloud-based service in the digital age that argument is quickly losing its bearing).

What I found most ironic about the T&C for iTunes purchased video content though is that unless it is specifically DRM-free iTunes Plus content, you are strictly forbidden from burning the files onto a disc (this makes no distinction between burning a data disc or video disc). Again, what the hell Apple? So you're voiding yourself of all liability if I lose the files, but you're forbidding me from creating physical back ups of the content? Yeah, that makes sense.

I can't and won't say that I've never pirated software (etc.) in the past, and I can't and won't say that I'll never do it again in the future. But for crying out loud, I legally purchased this content, and I am being penalized and punished for trying to have access to it. I've read many a time the opinions of some of you here on this type of issue with DRM (Darth as one example comes to mind as an advocate against it, for exactly this reason).

So thanks for listening (read as: reading) while I ranted for a bit, but in all honesty, why do we allow this system of punishing and abusing those who are following the rules to continue? For what it's worth, I could have downloaded the videos, DRM free, without paying for them, and avoided all of this entirely. Sure, it would be illegal, but the odds of me personally being caught and convicted for downloading a TV show is infinitely less likely than the probability that the DRM that is supposedly set in place to protect the legal rights of the content owners will infringe on my own right to use the content legally.

Interested to hear your thoughts.
#57
I've been putting some thought into it, and most adventure game interfaces have quite a few similar elements, but despite all the modules and templates floating around, it often creates a daunting and unfriendly barrier for newcomers who have little to no programming experience. Between on_key_press, on_mouse_click, repeatedly_execute, GUIControl event handlers, and the like, there's a lot to consider when first starting out.

So, why not take those similar elements from various interfaces and provide a way to define their relations more generically? This was the basic premise of the Interfacer module - to provide a generic script structure for handling a graphical user interface (meaning not just a single GUI, but the game's interface as a whole).

With the Interfacer module you can handle most of your interface's scripting all from one place, say, game_start.

While you will need some basic programming to use the module, I've now included a plugin so you can set the interactions graphically. I hope that this can simplify things for those who are starting out. The module isn't just for newcomers though. Imagine for a moment trying to include a 9-verb LucasArts interface, Sierra icon bar, and a verbcoin interface all within the same game. Even if you used the modules that are around, combining them might not be so straight-forward.

The Interfacer module also makes it easy to implement multiple types of interface within your game, simply by swapping out its settings. With a few custom functions you can implement various interfaces with relatively little code, and without having to worry about any issues that might otherwise arise from using multiple modules.

In any case, that's enough talking.

[DOWNLOAD v0.80 Beta 4] (Includes module+plugin!)
Interfacer v0.80 Beta 4 Module and Plugin Source
InterfacerModes* (Demo code and GUI)
Interfacer Demo (includes InterfacerModes) (press 1, 2, 3, and 4 to switch between 9-verb LA, Sierra, standard verbcoin, and static verbcoin)
Interfacer v0.80 Beta 3
Interfacer v0.80 Beta 2
Interfacer v0.80 Beta 1

I plan to include more documentation, but for now you can check out InterfacerModes for some example code, including this function which implements a basic statically-positioned verbcoin interface (similar to Gemini Rue):

Code: ags
void LoadStaticVerbcoinInterface()
{
  Interfacer.Clear();
  Interfacer.AddButton(btnUse, eButtonActionProcessLastClick, eModeInteract);
  Interfacer.AddButton(btnLookat, eButtonActionProcessLastClick, eModeLookat);
  Interfacer.AddButton(btnTalkto, eButtonActionProcessLastClick, eModeTalkto);
  //Interfacer.AddButton(btnResume, eButtonActionHideOwner); // requires gPanel from default template
  Interfacer.MouseButtonAction[eMouseLeft] = eMouseButtonActionProcessClick;
  Interfacer.MouseButtonDefaultMode[eMouseLeft] = eModeWalkto;
  Interfacer.MouseButtonAction[eMouseRight] = eMouseButtonActionShowGUI;
  Interfacer.MouseButtonGUIToShow[eMouseRight] = gInterface;
  Interfacer.MouseButtonGUIPosition[eMouseRight] = eShowGUIRelativeToMouse;
  //Interfacer.KeycodeGUIToShow[eKeyEscape] = gPanel; // requires gPanel
  //Interfacer.AddQuitButton(btnQuit, true); // requires gPanel
}


Edit: 9 June 2012 - After just over two grueling weeks of bashing my brain in, trying to wrap my mind around the best way to encapsulate and keep up-to-date all the relevant data, Beta 4 is here. So what's changed in the past couple of weeks? The biggest changes are on the plugin side. Previously there was an issue with the plugin not being able to refresh the project tree, so it was hard (impossible) to tell that scripts were being added/removed to the project. Also, when you made changes to the auto-generated script ("InterfacerInteractions.asc"), they were being read back, but the plugin wasn't updating immediately, which could cause confusion and frustration. Furthermore, when you made changes to the plugin data, the auto-generated script wasn't reflecting those changes until you saved the game. How annoying!

So, with Beta 4 I prioritized keeping you in the loop of when things are changing. It's considered "bad practice", but I plan to look into modifying the editor for future versions of the plugin. For now, I'm using a fair bit of reflection to keep things updated. What that means for you though, is that when the scripts are added to your project for the first time, you'll see them right away. It also means that if you make changes to the plugin data that the script can be updated right away, and if you make changes to the script, the plugin can read it back right away. There are other revisions, I'll notate the full details below.

Edit: 25 May 2012 - Uploaded v0.80 Beta 3. The plugin now fully reads back all keyboard and mouse data from the script, including user changes to the script. Plugin also now creates the module if it does not exist within the game.

Edit: 21 May 2012 - Uploaded v0.80 Beta 2. The plugin will now read back the mouse button data from the script. Known issue: GUI toggle, delay, and X/Y offset are not being properly read back.

Edit: 20 May 2012 - Added v0.80 Beta 1 of the plugin. Future releases will have both the module and plugin.

*NOTE: I forgot to comment the line for btnResume in InterfacerModes. The demo was built on top of the default template. You can either comment the line or add a btnResume to get it to compile.
#58
Critics' Lounge / World Map.
Tue 24/04/2012 18:51:53
I was just toying around with Photoshop, and I came up with this:



It's like some type of semi-realistic world view. It's composed entirely out of Photoshop filters, the Brightness/Contrast tool, Hue/Saturation tool, and setting layer blend modes.

Given that I was just messing around, I kind of like what I managed to come up with, but I was wondering if anyone could point out something that could specifically be done better (especially bearing in mind how I came up with it). Meaning, is there any particular filter or tool that could improve on what I've done? Or anything else, including manual touch ups.

Interested to hear what you think of it.
#59
I'm sorry, but what the hell??

The forums aren't falling apart again are they?


Just in case this is visible, to answer the question in the subject line...

Code: ags
function on_event(EventType event, int data)
{
  if (event == eEventRestoreGame)
  {
    // DO COMMAND HERE
  }
}


Edit: I did not start this topic, but mine is the only post I see here. :-\
#60


We all know what you're thinking. Why? Because you posted it to Facebook. And we're sick and tired of it. From here on out, we're not going to tolerate this unadulterated behavior. You have officially been censored. Break the rules, and we won't ask why. Strike one: You're out!

In this fortnightly, spin a tale of censorship. Is it good, is it bad? Now is the time not only to voice your opinion, but to make it ours as well. The sky's the limit on this one, provided that you got proper clearance first!

Bonus points* for originality:  Think outside the [CENSORED FOR COPYRIGHT INFRINGEMENT].â,,¢

*That is, I will show personal bias toward you. :=
SMF spam blocked by CleanTalk