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

#81
Hey, I was wondering, along with Ryan Timothy, why the Game.agf file is always named "Game" instead of, for example, using the name of the project folder (as is done with the EXE). I actually managed to write some changes to the editor that allowed it to do this, and it apparently was working fine.

To do so, I did have to change some const static fields into readonly static properties, so I'm unclear what the underlying consequences of that might be, but as I said I was able to get this working, even with templates or existing projects that had the "Game.agf" file.

The reason behind this change would be to take advantage of the Windows "Recent Documents", which, alongside a file association for AGF files, can be useful if you're working on several projects at once (especially like I do for various modules and such).

Also, if CJ reads this, could I maybe get check-in rights to the repository? Thanks ahead of time. :=
#82
I was looking for a free source control (versioning) system for use with AGS, which, per the manual, should be compatible with any MSSCCI-compliant revisioning software (yes, we've now covered the most common names for this type of software :P). I read somewhere that TortoiseSVNSCC is MSSCCI-compliant, though the actual project's site has nearly no documentation at all, so this could be incorrect perhaps?

In any case, when trying to start AGS (3.2.1) with TortoiseSVNSCC "installed" (registered the DLL with Windows via Regsvr32) AGS won't start at all; I get a Windows-based error that the program didn't start and would I like to check for a solution online. If I unregister the DLL then it starts up again.

In an unrelated note, on my roommate's Windows 7 laptop, TortoiseSVN's context menu doesn't show up after installing the program, but on the Windows 7 desktop it works fine..does anybody perhaps know anything about that? (If necessary this sub-discussion could be moved to a separate topic in the Gen-Gen).
#83
I've waited to see if the issues might be taken care of, but since they haven't I thought I'd say something about it. Particularly the issues I've noticed are that the search feature is broken, and more recently, if I log into the wiki the formatting seems to break.

I wasn't sure who would be the best to try and contact, but it would be great if these issues could be dealt with. ;)
#84
In working with my recent Verbcoin template, I'm now back-dating for the second time to a lower version of AGS (I'm working on porting the 3.1 template back to 3.0). In doing so I've discovered that a lot of resources have changed immensely since 3.0 was first released.

Unfortunately due to these changes, there isn't presently a simple or easy way of porting an AGS project to a prior version of AGS. The way that resources are read in is very unfriendly if the resources are coming from a newer version of AGS than the one trying to read them.

All this has got me thinking though, would it perhaps be better for AGS to provide some type of dialog whereby the user might have the opportunity to simply ignore errors such as these? For example, just off the top of my head, the Character.MovementLinkedToAnimation property didn't exist until AGS 3.1.1, but 3.1.1 uses the same file format for exported characters as AGS 3.1 did. So how then is the end-user to know from looking at the CHR file whether it's an AGS 3.1 character, an AGS 3.1.1 character, or an AGS 3.2.1 character?

Obviously ignoring errors upon import could potentially lead to other issues, but I'm thinking something along the lines of the user being granted the opportunity to ignore functions or properties of the imported item that the current version of AGS does not understand, prompting the user at each conflict. If the user so chooses to ignore these errors, then upon an otherwise successful import a log could be generated and a message displayed to the user, something such as:

Quote-----------------------------------------------
Adventure Game Studio
-----------------------------------------------

Import character 'cEgo':


Character.MovementLinkedToAnimation: Referenced property or function undefined, ignored.
Character.SpeechAnimationDelay: Referenced property or function undefined, ignored.


The above functions and properties could not be understood by this version of AGS, most likely because the imported character comes from a newer version of AGS. You may need to set the values for any of these properties elsewhere.

I understand that this type of thing is not strictly optimal, but it seems to me that it would be better to at least have the ability to share the resources backwards across prior versions of AGS than to simply abort the import with an error that the resource comes from a newer version of AGS.

Also, clearly it's too late for anything on this front to be done in the retrospective for past versions of AGS, but looking forward it might be worthwhile to consider this now, especially as the open-source movement is underway.

Thoughts?

Specifically Characters, GUIs, and Rooms are resources that I would like to see better cross-version compatibility for.
#85
Hey there. I don't mean to offend (so sorry if this comes across the wrong way Elecktroshokker), but to me the verbcoin template that is distributed with AGS is somewhat of a mess. I can't tell what most of the functions are for without looking at the manual, because the naming convention is rather odd. Also, I seem to recall that none of the functions the template defines return a value, so you can't read anything back once it's been set..which seems rather unfriendly to me (writeonly??).

So I'm not here to bash the great work that Elecktroshokker has done, I'm here to present my take on the verbcoin interface. It has some similarities to the existing template, but not all of the functionality is the same between the two.

I've taken the liberty of making the template in the form of a short game which also serves as the demo for the module.

Part of the goal I had in writing this was also that of making it available as a stand-alone module. The existing template uses a lot of statically scripted, hard-coded items which make it impossible to do this. With this module you can simply import the script into an existing project, which could save a lot of work if you've already begun developing your game.

Anyway, without further ado..links:

Verbcoin template v1.1 (For AGS 3.1.1+) (Includes module v1.1)
Verbcoin module v1.1 (For AGS 3.0+)
Verbcoin demo v1.0a (Includes module v1.0a, but not template) (This is the same as the compiled version of the template v1.0a)

Other versions (for compatibility purposes):

Verbcoin template v1.0c (For AGS 3.0+) (No native coordinates, uses low-res coordinates*) (Includes module v1.0b)
Verbcoin template v1.0a (For AGS 3.1+) (No "normal" dialog scripting, uses run-script*) (Includes module v1.0a)

*This shouldn't make any difference in your own game if using a higher version of AGS, and would then only to the template files themselves.

Older versions:

Verbcoin template v1.0b (For AGS 3.1.1+) (Includes module v1.0a)
Verbcoin module v1.0b (For AGS 3.0+)
Verbcoin template v1.0 (Requires AGS 3.2.1+)
Verbcoin module v1.0 (Requires AGS 3.2+)
Verbcoin demo v1.0 (Includes module v1.0)

I've tried to thoroughly test everything, and the module itself is quite heavily documented, but let me know if you encounter any bugs, or just if you have any questions/comments/etc. I'll try to post mirrors soon.

Here's an excerpt from the documentation to give you an idea of how to implement the module functions in an existing game:

QuoteGetting started with the Verbcoin module:
-----------------------------------------

Getting started with the Verbcoin module is relatively simple. Import the module into your project, and set up your GUI
however you would like. We'll use Button controls to determine where our "verbs" are at, so be sure that you add these
controls where appropriate. Once you've got that taken care of, you'll need to add a few lines to your script to finish
setting up the interface.

Example:

Code: ags
// GlobalScript.asc

function game_start()
{
  Verbcoin.CoinGUI = gVerbcoin; // tell the module which GUI we will be using for our verbcoin
  Verbcoin.XOffset = gVerbcoin.Width / 2; // set the offset for displaying our GUI
  Verbcoin.YOffset = gVerbcoin.Height / 2; // here we'll just centre it
  Verbcoin.AddButton(btnLook, "Look at", eModeLookat); // add our buttons that the verbcoin will use
  Verbcoin.AddButton(btnTalk, "Talk to", eModeTalkto); // we tell the module what text we want associated with the button
  Verbcoin.AddButton(btnUse, "Use", eModeInteract); // as well as what CursorMode we want to associate the button with
}


And that's it! This is a fairly basic setup for a verbcoin interface, with three buttons for Look, Talk, and Use. There
are other settings that you may want to look at such as Verbcoin.DefaultMode or Verbcoin.Delay, but this should be
enough to get you started.

19 April 2011

Based on some of the recent feedback, I've added two new options to make the module more customizable: Verbcoin.MouseButtonToUse and Verbcoin.IgnoreInventoryClicks. In case the names weren't self-explanatory enough, let me elaborate.

MouseButtonToUse allows you to specify a different MouseButton for activating the verbcoin. For example, if you want to use the right mouse button for the verbcoin instead of the left mouse button, you would simply set this to eMouseRight.

IgnoreInventoryClicks lets you specify that the verbcoin should not be used for inventory interactions. By default, the module treats clicks on inventory items the same as a click on a character, object, or hotspot. If you want to handle inventory items differently, this property now lets you do that.

There are also a couple of other minor changes as well, but nothing very significant really.

03 March 2011

Okay, technically I'm not making this edit until the 5th, so sue me. :D I've uploaded the module v1.0b and template v1.0c for compatibility fixes.

The module v1.0b corrects backwards compatibility of the module which was referencing String.IsNullOrEmpty, the only thing preventing full AGS 3.0+ compatibility. Since it's such a simple function I just changed the function calls to check each of the possible conditions directly. The module is now fully 3.0+ compatible.

The template v1.0c, as you may have noticed, has not been set as the primary download link for the template. The reason for this being that most users are probably using at least AGS 3.1.1 or higher if they are using an AGS 3 version, and there have been some significant changes. The template v1.0c is designed with those using AGS 3.0 to 3.0.2 in mind, who are bound to using low-res coordinates. You can import the template into higher versions of AGS and use native coordinates if you wish, but the template itself and included resources use only low-res coordinates.

17 February 2011

I've uploaded versions 1.0a and 1.0b of the template, and version 1.0a of the module and demo. The template v1.0a is designed for AGS 3.1 only (though is compatible with). The template v1.0b is for AGS 3.1.1+. The only difference between the two is whether the example dialog included in the template uses normal scripting commands. For this reason future versions of the template will not be designed around versions of AGS prior to 3.1.1.

The module version 1.0a is a minor bugfix because I was referencing eMouseMiddleInv, which didn't exist until AGS 3.2. The module itself should be compatible with AGS 3.0+, though I might have overlooked something else. I have verified module compatibility as far back as 3.1, which I'm guessing should cover most 3.0+ users anyway, but I will still try and find a copy of AGS 3.0 to verify.
#86
I haven't tested it in AGS 3.2 yet, only the 3.2.1 Beta, but if I use a static variable (such as Room.Height, System.ViewportWidth, etc.) in the index of a dynamic array (by itself or as part of an expression) then I get a compile-time error. If there is an expression used (i.e., an arithmetic applied to the value) then I get "parse error in expression near [array name]", otherwise I get "parse error after '['".

It's reasonably simple to work around, I just store the static variable's value into a temporary variable and it compiles properly.
#87
For those who didn't get the memo, I don't have a development computer at the moment (but hopefully should have one again in the near future). However, there is something that I noticed that I would like to see addressed regarding the autocomplete.

The built-in structures obviously autocomplete fine, but if you have a custom struct derived from a built-in type it doesn't appear in autocomplete..and any derived structures based on that type also fail to autocomplete:

Code: ags
struct MyStruct // autocompletes fine
{
  // ...
};

struct MyDerivedStruct extends MyStruct // autocompletes fine
{
  // ...
};

struct DerivedFromBuiltInStruct extends Character // does not autocomplete..ever
{
  // ...
};

struct DerivedFromMissingStruct extends DerivedFromBuiltInStruct // does not autocomplete..ever
{
  // ...
};


It would be nice if deriving from built-in structs would autocomplete properly (it compiles and runs fine).

..actually I don't really have any need to derive from a built-in struct right now simply because the way it currently stands there's no way to override the accessor functions for them..so anything marked as readonly would be impossible to set even from an updater function.

Once the engine becomes open-sourced though, I have some plans on ways to make the scripting language more easily extensible..which might involve modifying the behaviour of built-in attributes somewhat. Of course I'd do extensive testing before releasing any such changes, but the ability to override built-in behaviours under controlled situations wouldn't necessarily be a bad thing.
#88
For those who aren't familiar with it, I have written an article in the wiki regarding data encapsulation in AGS.

Since AGS 2.7's move toward object-oriented programming, AGS has been making use of the undocumented and unsupported keyword attribute. Every single member (property) of every single managed type (Character, Hotspot, Object, InventoryItem, GUI, GUIControl, etc.) is defined as an attribute.

So without simply restating what's in the wiki article regarding the implementation of an attribute, what really is it?

When you declare a property within a struct as an attribute, you must define it as an import:

Code: ags
import attribute int Property;


The reason this has to be imported is due to the way that the AGS compiler handles linking. The easiest way to explain "linking" is to look at the import keyword. Whenever you import a function/variable/pointer/struct instance the idea works similarly to that of a pointer in that instead of creating a new copy, you are just going to refer back to the one that already exists. This creates a link so that when you call "MyFunction" from room5.asc, the compiler knows you are referring to the function you actually defined in Functions.asc.

So when you're declaring an attribute, AGS is internally linking that attribute to its respective getter and setter accesor functions. Regardless of whether they are actually defined, AGS will internally link this attribute Property to functions get_Property and set_Property for the owning struct of the attribute. There isn't a compile-time error if the function doesn't exist because all this link does is tell AGS where to look if the linked resource is referenced.

In the case of attributes there is more going on internally than other imported declarations so it is more important that they be properly linked, but since we know what the attributes are being linked to we can safely ensure that the links are valid for runtime at compile-time.

The link created when an attribute is defined is essentially just allowing you the ease of access of using a property whilst allowing the expansive control possibilities of a function. This is perhaps the best reason for supporting encapsulation.

As it presently stands, the only technical reason that attributes aren't supported for use by the end-user is the sheer fact that no one has ever said, "Yeah, I'll support that." Understanding of how attributes work has been established. We now have the ability to look at this and determine what, if anything, may need to be changed within a user's script to make attributes function as expected; what is actually taking place when we look at a script written by someone else, but isn't working properly.

Again, attributes are intrinsically tied to the built-in data structures of AGS. Short of a massive overhaul of the built-in types, this is not likely to change in the near future.

With AGS making the move toward becoming open-sourced, I would like to propose, formally, that end-user support be formally adopted for usage of attributes within user scripts.

Below I'll even take a look at yet another benefit of data encapsulation that I thus far have not previously considered.


Thank you for your time.
#89
Why can't you even tell if a custom property exists or not from the script? WHY??

If you reference a property that doesn't exist then it creates a fatal error, but there's no way for us to provide any type of safety check before doing so! :-\

I'm adding this to my list of improvements to add to the engine when its source is released!!
#90
CJ told me off for using reflection to access things that aren't directly exposed in the plugin API, so I have a question. Is there any sort of precompile event exposed?

Also, I'm curious whether there's any way to access AGS event handler names, specifically for GUI event handlers. I don't need to invoke them (which I know editor plugins can't do of course), I just need to know the names. If possible, getting the parameter list as well would be nice.

I didn't see anything like either of these, but I just wanted to be sure I haven't overlooked anything.

The reason I'm asking for these specifically is that I've found a way to generically simulate clicks on GUIs from any script. It requires two helper functions, and the execution is delayed, but it works. Using data vectorization I can ensure that any simulated clicks called are run back in the correct order.

One of the helper functions directly references the event handler functions (this is why I need to know the function names) in the global script. The other is on_call in the room script.

The reason I want a precompile event is so that if the on_call function does not exist, or does have the required references, they can be added at compile time.

Delayed execution may not be optimal, true, but I think people might still find it useful to simulate GUI clicks outside of the GlobalScript (and later scripts).
#91
Understandably with no formal support for polymorphism, the idea of a base keyword may not make much sense. However, as I have explained here, simple polymorphism in AGS is possible. Presently we cannot create pointers to custom struct types, so this means we cannot simply use a pointer to access base-level functions when using derived class functions (in a polymorphic sense). However, it is possible for the engine to create temporary pointers, namely the this keyword.

What I'm proposing is that for derived types the engine could also create a temporary pointer to the base class object.

I've composed a highly detailed list of pros and cons for this suggestion:

CONS:

-This suggestion furthers the usability of an unsupported functionality.
-CJ thinks it's a horrible, horrible, stupid and pointless idea*.

PROS:

-This suggestion furthers the usability of polymorphism in AGS, a very important OOP functionality.
-It is, quite frankly, awesome.
-general_knox was just about to suggest it.
-It would give rise to more "all your base" jokes.

Thanks for your consideration. :=

*EDITOR'S NOTE: Mostly sarcasm.
#92
Quote---------------------------
Adventure Game Studio
---------------------------
An unexpected error occurred. Please post the following information on the AGS Technical Forum.



System.Runtime.InteropServices.SEHException: External component has thrown an exception.
---------------------------
OK   
---------------------------

I was working on the List module and attempted to compile to commit changes to the script and the editor asploded. 3.2 Final 5. Windows XP. Sadface.

I think at least one of the Send Error Reports went through..but there were several and I was getting more error messages from there too.
#93
It all started with the concept by HeirOfNorton that with the virtually infinite data storage the String type offered we could serialize integers into a dynamically (and automatically) sized container. I expanded that idea to floating point decimals and strings of text with the VectorClass module. Next came the Stack module which allowed many more types including Character, GUI, Hotspot, Object, etc. as well as custom data types and other Stack objects.

So what is the List module? The List module actually goes back to the specialized types that the VectorClass module used, but allows a couple of very important differences. The List module will make it possible to serialize certain pointer types previously not considered candidates, namely DynamicSprite and Overlay. Also, there will be* a generic List type comparable to the StackData type used in the Stack module which will allow you to pass specialized lists as function parameters, and store them as members of custom structs.

Anyway, I'll update this as I continue to develop it. Thanks for any feedback.

Download v0.3 BETA

To-do:
-Add ListOverlay for Overlay functions.
-Add ListViewFrame for ViewFrame functions.
-Add generic List type for including lists in custom structs and use as function parameters.
-Add conversion function for List type (in UNSUPPORTED functions)
-Optimize ListDynamicSprite and ListOverlay functions.
-Optimize PushArray and PopArray for all types.
-Add ability to push/pop null pointers for lists of all pointer types.

9 August 2010

Uploaded v0.3 BETA.

Optimized most functions for faster data access, and added eListEnforceRoomSpecificPointers to make room-specific pointers such as Hotspot, Object, and Region return null if Popped from a different Room than they were Pushed into the list in. Added constant List_VERSIONSTRING for use with functions such as Display.

6 August 2010

Uplodaded v0.2 BETA with the following changes: Added ListFloat, ListCharacter, ListInventoryItem, ListGUI, ListGUIControl, ListButton, ListInvWindow, ListLabel, ListListBox, ListSlider, ListTextBox, ListHotspot, ListObject, and ListRegion types for working with their respective data types.

I also added a to-do list.

5 August 2010

v0.1 BETA of the module is very preliminary. The reason I'm releasing it is primarily to request further testing of the DynamicSprite functions. I am taking some complex steps to be able to provide serialization of the DynamicSprites. I have done testing, but I know that being the author of the script I can sometimes overlook things. The module presently includes functionality for integers and Strings in addition to the DynamicSprite functions. The DynamicSprite methods don't include the FIle functions that the integer and String methods do, and I'm still experiencing some issues with getting the PopArray function to work for the DynamicSprites. The former likely won't be included because it would require the DynamicSprites themselves to be saved to disk.

*v0.3 BETA of the module does not yet implement the generic List type, or support Overrlay functions.
#94
General Discussion / This. Again.
Sun 13/06/2010 23:49:11
I've had a few people messaging me about various things, none of which have directly involved my sudden disappearance. At the sake of making a fool of myself and suddenly getting internet like the last time I posted one of these threads I delayed this posting for some time..

Once again I don't have internet access for my personal (daily) use. Occasionally I should be able to check emails and such on my roommates' phones and/or at my (unofficially adoptive) family's house, but I make no guarantees about response times for those who might wish to contact me.

If anyone feels a burning desire to get in contact with me, general_knox has a good cell number for me (which I can block individuals on since it's a Google Voice number :P)..Knox, you've got my go-ahead to supply that number to anybody who's been registered here since..eh..2009 or earlier.

Anyway, hope all is well in the world of AGS. Things are going well for me, personally. Back on my own two feet financially with a job, paying rent, all my own bills, etc. It's a huge relief after everything went monetarily downhill for some good while. Having no money is not great fun, but having no money because I'm paying my bills versus having no money and owing money to my family and friends is worse..

If I happen to get internet within the next two weeks..I'll probably deny it for the sake of making myself seem silly yet again with this type of post. But for now, I'll be..around..when I can.

-monkey
#95
General Discussion / Dell is serious business.
Wed 07/04/2010 03:13:08
The other day I was bored at work and had scribbled "SRSBSNS" which some of you may recognize as meaning "Serious Business".

Well, being excessively bored as it were I then proceeded to transcribe this into some horrific form of l33tsp33k and ended up with the result:
5125135175
Where of course:
 5 = S
12 = R
13 = B
17 = n
Well next I realized that I had exactly 10 digits. So tonight having unlimited minutes on my cell phone I decided to give them a call..

Turns out that the number 5125135175 is currently operated by Dell. I don't know what department it is because it was already closed when I called. But it turns out that Dell is, in fact, serious business.
#96
For those Monkey Island fanboys out there, the Special Edition of Monkey Island 2: LeChuck's Revenge is official.

Just posting this here in case anybody hasn't yet seen it. LA did take note from the fans regarding Guybrush's hair in the SoMI:SE and have vastly improved on their work, as can be seen in this image:



Also displayed in the image is the new SE logo which creates a fair amount of ambiguity as to the actual title of the game. Originally the title was "Monkey Island 2: LeChuck's Revenge". The LCR bit was placed on top of the MI2 bit for aesthetic reasons, but it worked just fine. In the new logo however, the "Special Edition" has been jammed in the middle of the "Monkey Island" and the "2". So, as you can see in the image the title now reads from top-to-bottom as "LeChuck's Revengeâ,,¢: Monkey Island: Special Edition 2". So whichever you prefer I suppose. I'll just stick to LCR:SE.

One more notable feature that I saw listed in the "Features" section on LA's site is that the voiceovers will be available in the "Classic" mode, unlike SoMI:SE.

There's also a new control mechanism to avoid having to point-n-click to walk around and you can directly control Guybrush. We'll see how that plays out. :)
#97
So I made the mistake of telling my Zune software that it can overwrite existing metadata in my songs in hopes that it would correctly identify any mistakes I may have made. Instead I now am having to manually edit about 10% of my songs which have been marked now as being authored by the Jonas Brothers.

The songs range across several genres, artists, time periods, etc. but all the metadata has been replaced indicating that the songs are by the Jonas Brothers, from an unknown album in the year 2007.

Last time I ever let something automatically overwrite that info..
#98
I got a text message from a friend of mine yesterday and she reminded me that Burton's Alice in Wonderland came out "today". Which I use terms like "yesterday" and "today" somewhat poorly because it is now after midnight making it 5 March when by "yesterday" I mean 3 March and "today" it was meant 12:00 AM 4 March.

However, my friend informed me that she and another mutual friend couldn't go see the movie because they could not find a babysitter for the other's two children. I told her, "I am not going to babysit while you two go see that movie!!" because although I love the kids and have somewhat played the role of a sort of uncle to them, I also happen to be a much bigger fan of Tim Burton than either of my two friends.

She laughed and told me that they were actually planning on me going with them, but the problem was that with no babysitter the plans were off.

Well, later she called me and asked if I could keep a secret..which you guessed it..means that we went without the other friend and saw the movie anyway. :P

We actually saw it in 3D which was a very interesting experience since I haven't seen anything in 3D for several years. I did notice that although it did make the movie more immersive, if you tried to focus on something other than what the camera wanted you to focus on the effect was horribly destroyed. Kind of drove my eyes bonkers.

On to the actual movie though:

For those who don't know, Tim Burton's Alice in Wonderland is actually set as a sequel to "Alice's Adventures in Wonderland", though it does not follow the storyline of "Through the Looking-Glass".

It's been years since I've read either book, so I really wouldn't feel fair to judge it against the books. However, despite my obvious aforementioned Tim Burton fandom, I do honestly feel like the movie was very well done and serves as a nice sequel to the first story. I have recently watched Disney's Alice in Wonderland (noting of course that Burton's film was also produced by Disney, but I will use "Disney" to refer to the 1951 animated film and "Burton" to refer to his 2010 live action film) which could easily be tied to this film, making this film a reasonable canonical sequel to Disney's Alice.

The story seemed well written, the actors well cast, and overall I felt this piece fit nicely together. I have seen that some have expressed concern regarding the use of CG for certain characters such as Tweedle Dee and Tweedle Dum who could reasonably have been cast by live actors. At certain points this opinion actually did draw my attention to this fact, yet there were certainly moments during the film when the characters were just so fluid that I didn't even really think about the fact that they didn't actually physically exist.

So..thoughts? :)

P.S.

Spoiler
The dance that The Mad Hatter did at the end..pretty brilliant I thought. Moreso when Alice did it back in the real world. I won't attempt to spell it though..haha
[close]

Spoiler
My friend actually commented on this point, and I definitely had to agree with her..I was really hoping (not necessarily expecting, but just wanting) to see some manifestation of the Hatter in the real world for Alice to run into. It's been done before so in a way I suppose it was good that it didn't happen, but I think it could have been worked in just as well.
[close]

Spoiler
Also, does anybody find Alice's comment to her aunt a bit hypocritical? Sure her aunt might be delusional and insane..but who is Alice to judge, honestly? I mean, what if her aunt had some sort of similar experience..oh and the aunt actually reminded me very much of the White Queen from the books. As I said I haven't read the books in years, but I do remember the White Queen as having been crazy as hell. :D
[close]
#99
Critics' Lounge / L4D RP OC Larsson Spectre
Tue 02/03/2010 08:20:50
This is an original character I created for use in a Left 4 Dead role play. I'm not really much of an RPer but a friend is and it's a fun way of killing some time..

Take 1:


Take 2:


I did this in MS Paint because although I know better tools exist and are free..simply using them wouldn't actually increase my artistic abilities..although having actual layers would have been nice.

I know the flaws in this image are vast and many so I'm not looking for stern/strict artistic/realistic critiquing on this, but I'd like to see what people think about it..and if there's anything that could be easily corrected no harm in pointing it out..such as colouring inside the lines which I failed at. :P

Oh and I've been told it looks like Guybrush..not intentional as the character doesn't look like him. I guess Guybrush is just the extent of my abilities haha.

P.S. I literally spent more time putting the writing on the poster than any other portion of the image. :D
#100
WARNING: This thread is not safe for viewing by anyone or anything (who doesn't like to see Disco naked). The authors of the content of this thread demand that anyone reading or viewing this thread (who doesn't like to see Disco naked) be advised that should you choose to proceed (towards seeing Disco naked) you are agreeing that you will in no way hold any of the authors of any of the content (i.e., Disco naked) in this thread liable for any negative consequence(s) (i.e., seeing Disco naked) thereof. Proceed at your own risk; you have been warned (that you will see Disco naked).

Okay...so you've all seen that thread that Mark started about some sort of nightclub where he does unmentionable things to other men...

But this thread has nothing to do with that. This thread has to do with the one and only Disco and how much we all love and care about him. In order to show our support of AGS's favorite member, I'm requesting everyone to send your donations via PayPal to impressiveowl@gmail.com

That is Disco's PayPal account (as you can see from his email address on his profile which is the same).

It's okay if you can't donate a lot. Donate $1. Donate $0.50...heck, even $0.01 will help!!

Show your appreciation for this awesome pink octopus avatar'd hoopy frood!! Just send something!
SMF spam blocked by CleanTalk