Code Monkey home page Code Monkey logo

ags's People

Contributors

alandrake avatar calinleafshade avatar ccawley2011 avatar criezy avatar edmundito avatar ericoporto avatar fernewelten avatar ffaf1 avatar gurok avatar ivan-mogilko avatar ivan-mogilko2 avatar janetgilbert avatar jclee avatar jjsat avatar kmar avatar matteopiovanelli-laser avatar mgambrell avatar monkey0506 avatar morganwillcock avatar panreyes avatar persn avatar pwiecz avatar rofl0r avatar scottchiefbaker avatar sonneveld avatar speechcenter avatar tag2015 avatar tobihan avatar toojays avatar tzachshabtay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ags's Issues

Splitting Engine and Editor source by separate repositories

When I started refactoring attempt I had an impression that Editor code should be kept close to Engine's, for they share part of the codebase. Back then there was, perhaps, a sense in this, because there were files divided on engine & editor "parts" by macros, and before those were separated it was more convenient to have both projects together so that every change could be quickly tested on both.

Now I do not see any serious reason to keep them in the same repository, since they are two separate programs, only sharing number of data structures and serialization formats.

In retrospect, keeping AGS.Native library up to date with changes to shared code was redundant, because there was nothing there that would affect editor's logic nor game compilation (but that's other issue).
Besides, ideally, AGS.Native should be rewritten to be a seamless part of the Editor anyway (aside from other reasons, that is required to make Editor compatible with Mono), and have all ties with engine code cut.

What are problems that may arise if we split those two projects?

I assume that most people have forked this repository to get the engine. So far we had never received any pull requests nor patches for the Editor, and I don't suppose someone is preparing one right now.

Cleaning history is more serious issue. If it is possible to erase individual files from the Git history, we could make both repositories have only related files down to the original state.
Information on cleaning may be found here: https://help.github.com/articles/remove-sensitive-data
and here: http://git-scm.com/book/en/Git-Tools-Rewriting-History
If we do that, we should be aware that all collaborators should do "rebase" when getting changes, not "merge".

In the end, we could have, e.g., ags-engine repository, ags-editor, and maybe some ags-utils for any tools, editor installation script, etc.

This is not something that may be done any moment, we should plan this carefully, make some tests first.

Car sprite shown at wrong position in the Ben Jordan 8's Main Menu

This is reproducible ONLY in refactory branch.

On Ben Jordan 8's Main Menu screen there's an unscaled car's sprite shown at the bottom of the screen. When the game is started, the sprite hangs there for few seconds, then starts moving up, changes scaling after a moment, and moves normally afterwards.

In the original game the car is not visible until game starts, and it is scaled correctly from the very beginning.

dataDirectory, an unused global variable

There's this global variable that exists only for builds with MAC_VERSION: char dataDirectory[512];
It is being set once in main_set_gamedir() function as the current active dir, but is never used anywhere.

Was it used somehow before? Is it needed anymore?

Plans for Technical Documentation?

Hey, I was just diving into the AGS code and this is my second time so I'm fairly overwhelmed by it! I noticed that there's not a lot of documentation on how everything works, how to set up the different builds (it's sprinkled all over the AGS wiki) and how to contribute to the project. Is there a plan to organize this information?

I've been studying how "C-Script" works a little bit. Can I just go to the github wiki and start writing what I got so far so that others can contribute?

Bad colours in "Trilby's Notes" under Linux

(This applies to the current git version, which I compiled earlier today.)

If I try to run Trilby's Notes [1] the red and blue colour components are swapped. It actually took a while for me to realize because at first I just thought the game was set at night. This isn't a new bug - I had the same problem with the original AGS 2.7.2 back when I first tried it - but I don't know if it's an AGS bug or an Allegro bug. (Back then I ended up building a custom version of the Allegro library that would swap the colours for me. Crude but effective.)

Other than that, the game seems to work fine, except at the moment I'm not getting any music. (I'm going to try a few things before I assume that's a bug though.) But I've only played through the first scene.

[1] http://www.fullyramblomatic.com/notes/

Eternity shuts down after first click

./ags ~/games/eternity/Eternity.exe
Adventure Creator v3.21 Interpreter
[...]

AGS: Starting game
AGS: Loading room 0
AGS: ***** ENGINE HAS SHUTDOWN

Discussion: Status of the master branch

Hi,

I did some testing with the master branch on 64 bit and it seems like some games don't crash anymore at all. There still seem to be some regressions though, especially with older games, see issues 33 and 34.

The detection of game files when only providing the folder does not work reliably yet, for instance when the folder name is given in quotes because it contains spaces. Barn Runner 1 Eclair 1 is not found even when the full path does not contain spaces and no quotes are used.

Android native fails to build with NDKr9 (master branch)

The README doesn't specify if a certain NDK version is strictly required, but NDKr9 fails to compile the native code, giving the following error:

/Engine/platform/android/acpland.cpp:678:65: error: format not a string literal and no format arguments [-Werror=format-security]

acpland.cpp line 678:

__android_log_print(ANDROID_LOG_DEBUG, "AGSNative", displbuf);

The surrounding method:

void AGSAndroid::WriteDebugString(const char* texx, ...)
{
if (psp_debug_write_to_logcat)
{
char displbuf[STD_BUFFER_SIZE] = "AGS: ";
va_list ap;
va_start(ap,texx);
vsprintf(&displbuf[5],texx,ap);
va_end(ap);
__android_log_print(ANDROID_LOG_DEBUG, "AGSNative", displbuf);
}
}

Apprentice 2: almp3_get_pos_msecs_mp3 is called while tune==NULL

Apprentice 2 is crashing at changing positions during the intro. When run in gdb, it always stops right at the start of the intro:

AGS: Loading room 2

Program received signal SIGSEGV, Segmentation fault.
almp3_get_pos_msecs_mp3 (mp3=0x0) at libsrc/almp3/almp3.c:876
876   second = mp3->current_frame * mp3->outbytes_per_frame;
(gdb) backtrace
#0  almp3_get_pos_msecs_mp3 (mp3=0x0) at libsrc/almp3/almp3.c:876
#1  0x000055555569ac7c in MYSTATICMP3::get_pos (this=0x555555f66f90) at media/audio/clip_mystaticmp3.cpp:130
#2  0x0000555555654bc1 in GetMP3PosMillis () at ac/global_audio.cpp:295
#3  0x00005555556473d9 in Sc_GetMP3PosMillis (params=, param_count=) at ac/global_api.cpp:667
#4  0x00005555556a4a99 in ccInstance::Run (this=this@entry=0x555555e903b0, curpc=curpc@entry=35940) at script/cc_instance.cpp:1049
#5  0x00005555556a4ee1 in ccInstance::CallScriptFunction (this=0x555555e903b0, funcname=0x5555556eb66d "repeatedly_execute_always", 
    numargs=0, params=params@entry=0x555555a8ad90) at script/cc_instance.cpp:368
#6  0x00005555556a555c in ccInstance::DoRunScriptFuncCantBlock (this=, funcToRun=0x555555a8ad80, hasTheFunc=0x555555a8add1)
    at script/cc_instance.cpp:410
#7  0x00005555556a67f3 in run_function_on_non_blocking_thread (funcToRun=0x555555a8ad80) at script/script.cpp:131
#8  0x0000555555692068 in game_loop_check_new_room () at main/game_run.cpp:142
#9  0x0000555555693ba1 in mainloop (checkControls=checkControls@entry=true, extraBitmap=extraBitmap@entry=0x0, extraX=extraX@entry=0, 
    extraY=extraY@entry=0) at main/game_run.cpp:694
#10 0x0000555555693d2e in main_game_loop () at main/game_run.cpp:840
#11 0x0000555555694155 in do_play_game () at main/game_start.cpp:139
#12 0x000055555569421a in initialize_start_and_play_game (override_start_room=0, loadSaveGameOnStartup=0x0) at main/game_start.cpp:180
#13 0x00005555556906ad in initialize_engine (argc=2, argv=0x7fffffffe318) at main/engine.cpp:1460
#14 0x00005555555ce806 in main (argc=2, argv=0x7fffffffe318) at main/main.cpp:375

Data file init

I made changes to how data file is found.
Tested on Windows and Linux, but I do not know if there are any differences to how it should work on PSP, Android and iOS. In particular - search in the directory.
From what I saw, PSP uses preset path (ac2game.dat), so I left it treated as a "command line parameter". Practically this means that PSP will never use any other way to look for game file. Is this correct?

invalid pointer (64bit) -> int (32bit) casts in current source

ac/roomstatus.cpp: In member function ‘void RoomStatus::WriteToFile_v321(AGS::Common::Stream_)’:
ac/roomstatus.cpp:58:26: warning: cast from ‘char_’ to ‘int’ loses precision

ac/gamestate.cpp: In member function ‘void GameState::WriteToFile_v321(AGS::Common::Stream_)’:
ac/gamestate.cpp:379:28: warning: cast from ‘int_’ to ‘int’ loses precision
ac/gamestate.cpp:380:28: warning: cast from ‘char**’ to ‘int’ loses precision

media/audio/queuedaudioitem.cpp:37:28: warning: cast from ‘SOUNDCLIP*’ to ‘int’ loses precision

../Common/ac/gamesetupstructbase.cpp:91:28: warning: cast from ‘char_’ to ‘int’ loses precision
../Common/ac/gamesetupstructbase.cpp:92:28: warning: cast from ‘CharacterInfo_’ to ‘int’ loses precision
../Common/ac/gamesetupstructbase.cpp:93:28: warning: cast from ‘ccScript*’ to ‘int’ loses precision

[BUG] duty and beyond misbehaviour

when entering room 49 (3rd level), in the .exe version shipped with duty and beyond, a pig appears - that one is missing in both scummvm and AGS version hosted here.

trilby 5 days segfaults

./ags ~/games/trilby-5days/5days.exe
...

AGS: Engine initialization complete
AGS: Starting game
AGS: Loading room 1
Shutting down Allegro due to signal #11
Segmentation fault

Incorrect INIreadint() behavior

It drew my attention that INIreadint() function (the one that reads options from config file) does not use "default value" parameter. Naturally one would assume it should return this value in case option was not found in config. However, it returns -1 in such case.

This behavior is obviously incorrect. However, if it is fixed, how that will affect reading options? I noticed there are several that (try to) use 0 as default value, but afterwards change the read results in a hacky way.

[BUG] Bestowers of Eternity misbehaviour

when loading said game, the intro screen is messed up in that an actor is displayed (even inventory/action bar) and clicks interpreted as move events.

however the original game does not show an actor there, and a click is used to start or quit the game.

this bug affects both AGS here and the scummvm port i'm currently working on.
since i have no idea what's wrong, it'd help if an ags-savy person could analyze this.

this is not related to any crash / 64bit bugs.

Room.HotspotCount setter silently adding items to Room.Hotspots.

I'm changing some code from using local variables to using the Room properties directly, and I started getting OutOfMemory exceptions, which I tracked back to a loop which apparently should only have run 16 times. There isn't a clear indication (from the interface level) that setting Room.HotspotCount, Room.WalkableAreaCount, etc. automatically populate the associated list. I don't believe that the setter method for an int property should be doing that anyway.

IMO, if you change HotspotCount then it's your responsibility to ensure that the list is updated also (by calling the method that does this, or adding them manually). If this is intended as a "feature", then I believe the interface should be changed. Having a public int property setter do this is very confusing, and in my case, led to crashing the editor.

Please consider changing this behavior. Thanks.

[BUG] games created with AGS Studio v2.52 have red and blue switched

grab old ags versions here:
http://web.archive.org/web/20060720110737/http://americangirlscouts.org/agswiki/index.php/AGS_Version_history

when creating a new "empty" game and a new room, a bit of content is already built-in, for example an actor with a red shirt and a blue cup.

in the new AGS engine, the shirt is blue and the cup red:
http://i.imgur.com/wtFOp.png

test game is here: 150 KB, .exe stub was removed using https://github.com/rofl0r/agsutils
https://github.com/downloads/rofl0r/ags/252mytest.exe

"Two of a kind": inventory items are not passed between characters properly

In the "Two of a kind" game you control 2 characters, who can pass inventory items between each other by the use of the "Use" command. In original game the item would be removed from one character's inventory and added to another character's inventory.

As of current master branch state (3.3.0.1130) this action seem to be broken: sometimes item is removed but not added, sometimes wrong item is passed.

Original game engine version is 2.61.747.
Game may be acquired here: http://www.adventuregamestudio.co.uk/site/games/game/462/

Quest for Glory II - Character import fails

There is a new bug in the QFG2 remake. It only occurs in versions after the script interpreter changes.

To reproduce:

  1. Download this qfg1 character: http://jjs.at/temp/GLORY1.SAV
  2. Put the file into the QFG2 folder
  3. On the main menu of QFG2 select "import hero" and select the file
  4. Import is "successful" but the character name is messed up (should be "test")

I don't think it matters what the character name is or what the stats are. I created a character with a character creator.

What I could investigate is that the file seems to be read succesfuly. You can see the contents appear in the File_ReadRawChar() function.

This is the original bug report: http://www.adventuregamestudio.co.uk/forums/index.php?topic=44768.msg634759#msg634759

my_sprintf handling of null strings is incompatible with AGS 3.12.1074 and earlier versions

If you run "Operation Forklift" game, go to "Campaign" - "Load game" and hover mouse over free save slot, the original game displays "Free slot" description, but build from this repository causes an error in my_sprintf: "One of the string arguments supplied was not a string".

The argument is indeed null pointer, returned from call to Game_GetSaveSlotDescription().

This is reproducible in older main branch too. Unfortunately I was unable to test latest CJ's version because it can't load 3.12.1074 games.

Game expects MAX_FONTS to be larger than 15

The game "Two of a kind" calls ensure_text_valid_for_font in Common/font/fonts with fontnum 15 (right after the intro), which is out of bounds of an array of size MAX_FONTS=15. Is the correct fix to set MAX_FONTS to 16 or should we do something more fancy here?

EDIT: Or should the array be accessed at fontnum-1?

King's Quest 2 remake: Savegame made up in the clouds fails to load

I've been playing the AGD Interactive remake of King's Quest 2, using the latest git version on Debian 32-bit Linux. For the most part, it has worked very well, but I noticed that if I save the game while up in the clouds (after riding the winged horse), I can't load that savegame. It crashes with the message:

Error: Game has been modified since save; unable to restore (GV02)

The problem seems to have something to do with save_game_overlays() / restore_game_overlays(). Up to that point, the save/restore functions seem to agree on which position they're at in the save file.

In save_game_overlays(), numscreenover is 1 so serialize_bitmap() is called and it saves a 400x6x32 bitmap.

In restore_game_overlays(), numscreenover is still 1 (unsurprisingly; it is read from the file), but it seems that read_serialized_bitmap() doesn't get called, so I guess screenover[0].pic was NULL. (My first hunch would be that restore_game_overlays() shouldn't care what screenover[bb].pic is, or at the very least it should skip past the bitmap in the file rather than ignoring it. But I don't really know.)

So when it calls the next function, restore_game_dynamic_surfaces(), it's reading from the wrong position and of course after that it's just a matter of time before something bad happens.

Music stutter

I noticed that music stutter sometimes. Can't tell what kind of music format is that.
This happened in Ben Jordan 8 and King's Quest 2 so far (but I just did not test much games).

Does not happen when I run original game's executable (and it's quite distinctive).
It's like AGS repeats a small bit of music every 3-4 seconds.

Random crash in wouttext_outline (possible explanation included)

Today, I played through AGD Interactive's King's Quest 1 remake using the current master branch. While it worked fine for the most part, sometimes text boxes would come up empty and occasionally it would crash. When I managed to capture a crash in the debugger, it always pointed to GetCompatibleColor() being called by wouttext_outline().

I'm not at all familiar with the inner workings of AGS, but here's what I think happens. (Sorry if I ramble, but it helps me think.)

  • _display_main() creates 'screenop' and passes it to SetVirtualScreen(). The return value is stored in 'ds', which means 'ds' and 'screenop' are pointing to the same bitmap. At this point, 'wantFreeScreenop' is set to 1.
  • _display_main() then calls draw_text_window_and_bar(), passing 'ds' to it.
  • draw_text_window_and_bar() calls draw_text_window() which apparently enters the case where, depending on 'wantFreeScreenop', it may decide to delete 'screenop'. A new 'screenop' is created and passed to SetVirtualScreen(). (In addition, draw_text_window_and_bar() may also decide to delete and recreate 'screenop'.)
  • When it gets back to _display_main(), 'ds' may not be pointing at a valid bitmap any more.

So I'm guessing that _display_main() should call GetVirtualScreen() to get the new 'ds' pointer directly after calling draw_text_window_and_bar() (in both places?). Initial testing looks promising, but the glitch happens so randomly (and the crash even more so) that it's hard to say for sure.

Recursive gamedir

Hi!
Please add support for a recursive gamedir (on Android).
When I put my games into subfolders, they are not shown in AGS.

stability issues with AGS (was: failure to run Hitchhiker's Guide to the Galaxy Remake)

AGS: Load game data
AGS: Hitchhiker's Guide to the Galaxy Remake

AGS: Starting game
An internal error has occurred. Please note down the following information.
If the problem persists, post the details on the AGS Technical Forum.
(ACI version 3.21.1115)

Error: Error running function 'game_start':
Error: Pointer cast failure: the object being pointed to is not in the managed object pool

AGS: ***** ENGINE HAS SHUTDOWN

built on linux x64

Android: Allow setting separate working/default save directory from game path.

I've been looking into what would be needed to publish standalone APKs of AGS games. Just for those who may not be aware, an APK can only be up to 50 MB, so if it exceeds that then an expansion OBB file must be used.

What I'm already able to do:

  • Publish an APK with an OBB to the Google Play store.
  • Download the game resources.
  • Extract game resources from OBB to the "standard" AGS directory (e.g., "/sdcard/ags/Game/*" (using getExternalStorageDirectory of course)
  • Launch and run the game from that folder!

The problem with this is that the expansion file must not be deleted (or Google Play and/or the app itself will attempt to download it again), thus resulting in a duplication of the game resources (e.g., a 500 MB game could require 1 GB+ to download and install).

The expansion OBB files can be mounted as a temporary folder, which allows the engine to read the files directly. Unfortunately, the engine also expects the game to be launched from a writable location and the OBB is mounted to a non-writable location.

What steps would be required to allow the engine to have a separate working (default save) directory from the game's actual path? If it's a relatively simple modification, then I would have everything I need to publish standalone APKs of AGS games. :) Thanks for any tips/info...I'll try looking around the engine.

FPS display incorrect Z-order

I noticed that sometimes when I run game with fps counter on, it may be covered by some of the game objects.
For example, in the "Infinity String" main menu the "loops" counter is partially covered by animated grass.
And for some reason the counter does not show up in Resonance, at all.

Android: Suggestion for mouse/pointer movement a'la scummvm

IMHO the scummvm andriod/touch developers came up with a very useful idea: every touch "movement" moves the mouse cursor relative to it's current position and not absolute to where the events originated.

Rational: it's hard to hit small things on the screen when your finger is in front of you.

This means also a single touch event for left click would generate a click even where the cursor is currently located, not where touch even originated.

A touch event with two fingers, aka right mouse click, would also not move the cursor around but just change it's appearance / action.

It probably sounds strange to those unfamiliar with this idea but it's a very practical thing.

[BUG] Makefile-defs.linux uses -pie -fpie unconditionally

i guess this flag was added by ivan to test the segfault i reported.
it should not stay there, because

  1. it produces build error when linking against any library that was not built with -fPIC:
ld.bfd: /usr/local/lib/libaldmb.a(packfile.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC)
  1. it makes all function calls and global var accesses go through the GOT which severely hurts performance on register pressure, for example on i387 were only 7 general purpose regs are available and one (ebx) is constantly held by the GOT ptr. typical performance cost for PIC/PIE code on i386 is about 10-20%.

  2. test CFLAGS should go to config.mak, because that is included by the Makefile for exactly this case: user defined build flags which are not to be tracked by the VCS,

play.room_height problems in Apprentice

Hi, as I was playing Apprentice, I've noticed that when I am in the outside location (tall location with hill, barn and sheep at the beginning of the game) I cannot make inventory show up by moving mouse pointer to the bottom of the screen.
I've found a way to fix it by changing room_height field value of the gamestate (it's an exposed variable) (set in room.cpp) from actual room height (400) to the height of the screen (200).
But I'm not sure it's the correct value of the field.
Could someone who knows the system check it up, and suggest what's the right solution?

FileOpen corrupts files Refactory branch

If I read code correctly external function "FileOpen" in the main branch is registered as having paramenters "char* filename" and "char* mode", while in refactory branch as having parameters "char* filename", "FileOpenMode", "FileWorkMode".
This makes calls to FileOpen have random Open and WorkMode, and usually open file in "w+b" mode deleting original file contents.

E.g. this call is used in King's Quest II, and problem can be seen by just waiting for it to try to open "intro.dat" and play the intro, or skipping loading screens by pressing the left mouse button a few times (not the escape key). The ags will delete the contents of intro.dat and crash.

Jussica Plunkenstein: trying to access stack data inside stack entry

I tested the master branch with Jessica Plunkenstein, which is an older game. I skipped all the intros and tried showing the plain ticket from the inventory (tab) to the guy on the left. Got the following error. Doesn't happen with the main branch.

AGS: Loading room 10
An internal error has occurred. Please note down the following information.
If the problem persists, post the details on the AGS Technical Forum.
(ACI version 3.21.1115)

Error: Error running function 'character4_c':
Error: trying to access stack data inside stack entry, stack corrupted?

AGS: ***** ENGINE HAS SHUTDOWN

Android engine logs GL_OUT_OF_MEMORY when screen hidden

While running a game if I press the Home button or switch to a different content view I am getting errors such as this printed to the log, several times per second:

09-28 01:43:02.291: E/Adreno200-ES11(29061): <qglDrvAPI_glTexSubImage2D:2055>: GL_OUT_OF_MEMORY

Note that I have not experienced any run-time issues, but I am tracking a bug that is causing the engine to silently close occasionally (and seemingly at random). It seems that the engine is still trying to draw to the surface, even when it isn't being shown.

Earlier in the log there are several instances of a couple other errors being logged:

09-28 01:42:42.972: E/Adreno200-EGLSUB(29061): GetBackBuffer() dequeue native buffer failed: No such device
09-28 01:42:42.972: E/Adreno200-EGL(29061): <qeglDrvAPI_eglSwapBuffers:3339>: EGL_BAD_ALLOC

Can anyone shed any light on the cause (and any potential effects) of these errors? Google hasn't been much help.

building a debian package doesn't seem to work

I've followed the instructions in debian/README.md . I have used them to install a functional AGS in the "normal" way, make --directiory=Engine install . That part works fine. But when I follow the instructions for building a Debian package, I get a package with the README in it and basically nothing else--no binaries. At least it installs.

In case it matters...
OS: Kubuntu 13.04 64bit
CPU: AMD Athlon X2

ColourWise: text window borders stay on screen during fade-out

This bug only occurs when using 3D renderers (Direct3D, OpenGL).

Found in versions: 3.1.1 - 3.6.0.

When the fade-out starts right after text window was displayed (e.g. during room transition) the middle of the text window is removed, but the borders stay on screen. This looks confusing, like the contents of the window turn transparent, but its actually the borders that failed to be removed, or maybe the part of the screen is not repainted properly. If you run original game, it could be noticed, that text windows are removed a moment after fade-out starts.

Easiest way to reproduce: start any level and press SPACE to restart. The message "One more time" appears before the level reset. Click mouse or press any key, and observe the issue.

Inverted text color in AGS Editor on Label GUI

As of 2012/09/12 "refactory" branch has following bug: in the Editor's GUI preview the Label objects draw text with color that seems to be an inversion of the one that was set in GUI's properties. This does not affect the running game.
I suspect some of the previous changes in shared code broke compatibility with Editor and it may use incorrect drawing implementation.
NOTE: this bug is present at the stage before Bitmap class, can't tell for how long it's been there.

Barn Runner 1 Eclair 1: pure virtual method called

At the start of the opening movie, I get this error. Using the master branch This does not happen with the main branch.

AGS: Loading room 20
pure virtual method called
terminate called without an active exception
*** glibc detected *** ags: double free or corruption (!prev): 0x00007f2a81049a30 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x75b76)[0x7f2a7e709b76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f2a7e70e8ac]
/usr/lib/x86_64-linux-gnu/liballeg.so.4.4(destroy_sample+0x1c)[0x7f2a800a9a3c]
/usr/lib/x86_64-linux-gnu/liballeg.so.4.4(+0x424d4)[0x7f2a800644d4]
/usr/lib/x86_64-linux-gnu/liballeg.so.4.4(remove_sound+0x7e)[0x7f2a800aa12e]
/usr/lib/x86_64-linux-gnu/liballeg.so.4.4(allegro_exit+0x1d)[0x7f2a8004b7ed]
/usr/lib/x86_64-linux-gnu/liballeg.so.4.4(+0xbb137)[0x7f2a800dd137]
/lib/x86_64-linux-gnu/libc.so.6(+0x324f0)[0x7f2a7e6c64f0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35)[0x7f2a7e6c6475]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x180)[0x7f2a7e6c96f0]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x11d)[0x7f2a7e3f289d]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x63996)[0x7f2a7e3f0996]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x639c3)[0x7f2a7e3f09c3]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x644df)[0x7f2a7e3f14df]
ags(_Z17update_mp3_threadv+0x5c)[0x7f2a8065c6dc]
ags(_ZN3AGS6Engine13PThreadThread13_thread_startEPv+0x12)[0x7f2a80667ea2]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x6b50)[0x7f2a7eca3b50]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7f2a7e76c70d]
======= Memory map: ========
7f2a675e6000-7f2a6b5e7000 rw-s 00000000 00:11 56660 /run/shm/pulse-shm-3418340510
7f2a6b5e7000-7f2a6f5e8000 rw-s 00000000 00:11 56655 /run/shm/pulse-shm-594289429
7f2a6f5e8000-7f2a6f5e9000 ---p 00000000 00:00 0
7f2a6f5e9000-7f2a6fde9000 rw-p 00000000 00:00 0
7f2a72bc3000-7f2a72bc4000 ---p 00000000 00:00 0
7f2a72bc4000-7f2a733c4000 rw-p 00000000 00:00 0
7f2a733c4000-7f2a733c5000 ---p 00000000 00:00 0
7f2a733c5000-7f2a73bc5000 rw-p 00000000 00:00 0
7f2a73bc5000-7f2a73bca000 r-xp 00000000 fe:01 1316717 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_ctl_pulse.so
7f2a73bca000-7f2a73dc9000 ---p 00005000 fe:01 1316717 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_ctl_pulse.so
7f2a73dc9000-7f2a73dca000 r--p 00004000 fe:01 1316717 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_ctl_pulse.so
7f2a73dca000-7f2a73dcb000 rw-p 00005000 fe:01 1316717 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_ctl_pulse.so
7f2a73dcb000-7f2a73dea000 r--p 00000000 fe:01 1186081 /usr/share/locale/de/LC_MESSAGES/libc.mo
7f2a73dea000-7f2a73dfd000 r-xp 00000000 fe:01 3670021 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f2a73dfd000-7f2a73ffc000 ---p 00013000 fe:01 3670021 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f2a73ffc000-7f2a73ffd000 r--p 00012000 fe:01 3670021 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f2a73ffd000-7f2a73ffe000 rw-p 00013000 fe:01 3670021 /lib/x86_64-linux-gnu/libresolv-2.13.so
7f2a73ffe000-7f2a74000000 rw-p 00000000 00:00 0
7f2a74000000-7f2a74033000 rw-p 00000000 00:00 0
7f2a74033000-7f2a78000000 ---p 00000000 00:00 0
7f2a78036000-7f2a78037000 rw-p 00000000 00:00 0
7f2a7819f000-7f2a78452000 r-xp 00000000 fe:01 1190525 /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8
7f2a78452000-7f2a78651000 ---p 002b3000 fe:01 1190525 /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8
7f2a78651000-7f2a7866d000 r--p 002b2000 fe:01 1190525 /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8
7f2a7866d000-7f2a7866e000 rw-p 002ce000 fe:01 1190525 /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8
7f2a7866e000-7f2a786b9000 r-xp 00000000 fe:01 1190523 /usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0
7f2a786b9000-7f2a788b8000 ---p 0004b000 fe:01 1190523 /usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0
7f2a788b8000-7f2a788b9000 r--p 0004a000 fe:01 1190523 /usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0
7f2a788b9000-7f2a788ba000 rw-p 0004b000 fe:01 1190523 /usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0
7f2a788ba000-7f2a788cf000 r-xp 00000000 fe:01 3670030 /lib/x86_64-linux-gnu/libnsl-2.13.so
7f2a788cf000-7f2a78ace000 ---p 00015000 fe:01 3670030 /lib/x86_64-linux-gnu/libnsl-2.13.so
7f2a78ace000-7f2a78acf000 r--p 00014000 fe:01 3670030 /lib/x86_64-linux-gnu/libnsl-2.13.so
7f2a78acf000-7f2a78ad0000 rw-p 00015000 fe:01 3670030 /lib/x86_64-linux-gnu/libnsl-2.13.so
7f2a78ad0000-7f2a78ad2000 rw-p 00000000 00:00 0
7f2a78ad2000-7f2a78ae0000 r-xp 00000000 fe:01 1187925 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0
7f2a78ae0000-7f2a78ce0000 ---p 0000e000 fe:01 1187925 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0
7f2a78ce0000-7f2a78ce1000 rw-p 0000e000 fe:01 1187925 /usr/lib/x86_64-linux-gnu/libXi.so.6.1.0
7f2a78ce1000-7f2a78ce5000 r-xp 00000000 fe:01 3670089 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f2a78ce5000-7f2a78ee4000 ---p 00004000 fe:01 3670089 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f2a78ee4000-7f2a78ee5000 r--p 00003000 fe:01 3670089 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f2a78ee5000-7f2a78ee6000 rw-p 00004000 fe:01 3670089 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
7f2a78ee6000-7f2a78eea000 r-xp 00000000 fe:01 3670063 /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f2a78eea000-7f2a790e9000 ---p 00004000 fe:01 3670063 /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f2a790e9000-7f2a790ea000 r--p 00003000 fe:01 3670063 /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f2a790ea000-7f2a790eb000 rw-p 00004000 fe:01 3670063 /lib/x86_64-linux-gnu/libattr.so.1.1.0
7f2a790eb000-7f2a790f0000 r-xp 00000000 fe:01 1190519 /usr/lib/x86_64-linux-gnu/libasyncns.so.0.3.1
7f2a790f0000-7f2a792ef000 ---p 00005000 fe:01 1190519 /usr/lib/x86_64-linux-gnu/libasyncns.so.0.3.1
7f2a792ef000-7f2a792f0000 rw-p 00004000 fe:01 1190519 /usr/lib/x86_64-linux-gnu/libasyncns.so.0.3.1
7f2a792f0000-7f2a79351000 r-xp 00000000 fe:01 1190527 /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25
7f2a79351000-7f2a79550000 ---p 00061000 fe:01 1190527 /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25
7f2a79550000-7f2a79552000 r--p 00060000 fe:01 1190527 /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25
7f2a79552000-7f2a79553000 rw-p 00062000 fe:01 1190527 /usr/lib/x86_64-linux-gnu/libsndfile.so.1.0.25
7f2a79553000-7f2a79557000 rw-p 00000000 00:00 0
7f2a79557000-7f2a79560000 r-xp 00000000 fe:01 3673477 /lib/x86_64-linux-gnu/libwrap.so.0.7.6
7f2a79560000-7f2a7975f000 ---p 00009000 fe:01 3673477 /lib/x86_64-linux-gnu/libwrap.so.0.7.6
7f2a7975f000-7f2a79760000 r--p 00008000 fe:01 3673477 /lib/x86_64-linux-gnu/libwrap.so.0.7.6
7f2a79760000-7f2a79761000 rw-p 00009000 fe:01 3673477 /lib/x86_64-linux-gnu/libwrap.so.0.7.6
7f2a79761000-7f2a79762000 rw-p 00000000 00:00 0
7f2a79762000-7f2a79767000 r-xp 00000000 fe:01 1190407 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0
7f2a79767000-7f2a79966000 ---p 00005000 fe:01 1190407 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0
7f2a79966000-7f2a79967000 rw-p 00004000 fe:01 1190407 /usr/lib/x86_64-linux-gnu/libXtst.so.6.1.0
7f2a79967000-7f2a7996e000 r-xp 00000000 fe:01 1189372 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1
7f2a7996e000-7f2a79b6d000 ---p 00007000 fe:01 1189372 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1
7f2a79b6d000-7f2a79b6e000 rw-p 00006000 fe:01 1189372 /usr/lib/x86_64-linux-gnu/libSM.so.6.0.1
7f2a79b6e000-7f2a79b85000 r-xp 00000000 fe:01 1189370 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0
7f2a79b85000-7f2a79d84000 ---p 00017000 fe:01 1189370 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0
7f2a79d84000-7f2a79d86000 rw-p 00016000 fe:01 1189370 /usr/lib/x86_64-linux-gnu/libICE.so.6.3.0
7f2a79d86000-7f2a79d89000 rw-p 00000000 00:00 0
7f2a79d89000-7f2a79d8a000 r-xp 00000000 fe:01 1186482 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0
7f2a79d8a000-7f2a79f89000 ---p 00001000 fe:01 1186482 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0
7f2a79f89000-7f2a79f8a000 rw-p 00000000 fe:01 1186482 /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1.0.0
7f2a79f8a000-7f2a79f8e000 r-xp 00000000 fe:01 3673459 /lib/x86_64-linux-gnu/libcap.so.2.22
7f2a79f8e000-7f2a7a18d000 ---p 00004000 fe:01 3673459 /lib/x86_64-linux-gnu/libcap.so.2.22
7f2a7a18d000-7f2a7a18e000 rw-p 00003000 fe:01 3673459 /lib/x86_64-linux-gnu/libcap.so.2.22
7f2a7a18e000-7f2a7a1d2000 r-xp 00000000 fe:01 3673481 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.2
7f2a7a1d2000-7f2a7a3d2000 ---p 00044000 fe:01 3673481 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.2
7f2a7a3d2000-7f2a7a3d3000 r--p 00044000 fe:01 3673481 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.2
7f2a7a3d3000-7f2a7a3d4000 rw-p 00045000 fe:01 3673481 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.2
7f2a7a3d4000-7f2a7a435000 r-xp 00000000 fe:01 1190531 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-2.0.so
7f2a7a435000-7f2a7a634000 ---p 00061000 fe:01 1190531 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-2.0.so
7f2a7a634000-7f2a7a635000 r--p 00060000 fe:01 1190531 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-2.0.so
7f2a7a635000-7f2a7a637000 rw-p 00061000 fe:01 1190531 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-2.0.so
7f2a7a637000-7f2a7a63e000 r-xp 00000000 fe:01 1190521 /usr/lib/x86_64-linux-gnu/libjson.so.0.0.1
7f2a7a63e000-7f2a7a83d000 ---p 00007000 fe:01 1190521 /usr/lib/x86_64-linux-gnu/libjson.so.0.0.1
7f2a7a83d000-7f2a7a83e000 r--p 00006000 fe:01 1190521 /usr/lib/x86_64-linux-gnu/libjson.so.0.0.1
7f2a7a83e000-7f2a7a83f000 rw-p 00007000 fe:01 1190521 /usr/lib/x86_64-linux-gnu/libjson.so.0.0.1
7f2a7a83f000-7f2a7a888000 r-xp 00000000 fe:01 1190529 /usr/lib/x86_64-linux-gnu/libpulse.so.0.14.2
7f2a7a888000-7f2a7aa87000 ---p 00049000 fe:01 1190529 /usr/lib/x86_64-linux-gnu/libpulse.so.0.14.2
7f2a7aa87000-7f2a7aa88000 r--p 00048000 fe:01 1190529 /usr/lib/x86_64-linux-gnu/libpulse.so.0.14.2
7f2a7aa88000-7f2a7aa89000 rw-p 00049000 fe:01 1190529 /usr/lib/x86_64-linux-gnu/libpulse.so.0.14.2
7f2a7aaa0000-7f2a7aaa6000 r-xp 00000000 fe:01 1316708 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pulse.so
7f2a7aaa6000-7f2a7aca5000 ---p 00006000 fe:01 1316708 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pulse.so
7f2a7aca5000-7f2a7aca6000 r--p 00005000 fe:01 1316708 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pulse.so
7f2a7aca6000-7f2a7aca7000 rw-p 00006000 fe:01 1316708 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_pulse.so
7f2a7aca7000-7f2a7aca8000 ---p 00000000 00:00 0
7f2a7aca8000-7f2a7b4a8000 rw-p 00000000 00:00 0
7f2a7b4a8000-7f2a7b4a9000 ---p 00000000 00:00 0
7f2a7b4a9000-7f2a7bca9000 rw-p 00000000 00:00 0
7f2a7bca9000-7f2a7bcab000 r-xp 00000000 fe:01 4732096 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsamidi.so
7f2a7bcab000-7f2a7beaa000 ---p 00002000 fe:01 4732096 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsamidi.so
7f2a7beaa000-7f2a7beab000 rw-p 00001000 fe:01 4732096 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsamidi.so
7f2a7beab000-7f2a7beb2000 r-xp 00000000 fe:01 3670040 /lib/x86_64-linux-gnu/librt-2.13.so
7f2a7beb2000-7f2a7c0b1000 ---p 00007000 fe:01 3670040 /lib/x86_64-linux-gnu/librt-2.13.so
7f2a7c0b1000-7f2a7c0b2000 r--p 00006000 fe:01 3670040 /lib/x86_64-linux-gnu/librt-2.13.so
7f2a7c0b2000-7f2a7c0b3000 rw-p 00007000 fe:01 3670040 /lib/x86_64-linux-gnu/librt-2.13.so
7f2a7c0b3000-7f2a7c19f000 r-xp 00000000 fe:01 1188821 /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
7f2a7c19f000-7f2a7c39f000 ---p 000ec000 fe:01 1188821 /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
7f2a7c39f000-7f2a7c3a5000 r--p 000ec000 fe:01 1188821 /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
7f2a7c3a5000-7f2a7c3a7000 rw-p 000f2000 fe:01 1188821 /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
7f2a7c3a7000-7f2a7c3ab000 r-xp 00000000 fe:01 4732095 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsadigi.so
7f2a7c3ab000-7f2a7c5ab000 ---p 00004000 fe:01 4732095 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsadigi.so
7f2a7c5ab000-7f2a7c5ac000 rw-p 00004000 fe:01 4732095 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-alsadigi.so
7f2a7c5ac000-7f2a7c5b1000 r-xp 00000000 fe:01 1193403 /usr/lib/x86_64-linux-gnu/libXxf86dga.so.1.0.0
7f2a7c5b1000-7f2a7c7b1000 ---p 00005000 fe:01 1193403 /usr/lib/x86_64-linux-gnu/libXxf86dga.so.1.0.0
7f2a7c7b1000-7f2a7c7b2000 rw-p 00005000 fe:01 1193403 /usr/lib/x86_64-linux-gnu/libXxf86dga.so.1.0.0
7f2a7c7b2000-7f2a7c7b7000 r-xp 00000000 fe:01 4732080 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-dga2.so
7f2a7c7b7000-7f2a7c9b7000 ---p 00005000 fe:01 4732080 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-dga2.so
7f2a7c9b7000-7f2a7c9b8000 rw-p 00005000 fe:01 4732080 /usr/lib/x86_64-linux-gnu/allegro/4.4.2/alleg-dga2.so
7f2a7c9b8000-7f2a7c9b9000 rw-p 00000000 00:00 0
7f2a7c9b9000-7f2a7c9be000 r-xp 00000000 fe:01 1183116 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
7f2a7c9be000-7f2a7cbbd000 ---p 00005000 fe:01 1183116 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
7f2a7cbbd000-7f2a7cbbe000 rw-p 00004000 fe:01 1183116 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
7f2a7cbbe000-7f2a7cbc0000 r-xp 00000000 fe:01 1183113 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
7f2a7cbc0000-7f2a7cdc0000 ---p 00002000 fe:01 1183113 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
7f2a7cdc0000-7f2a7cdc1000 rw-p 00002000 fe:01 1183113 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
7f2a7cdc1000-7f2a7cdc6000 r-xp 00000000 fe:01 1186460 /usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0Abgebrochen

Editor: Room Region collection type

Room's region collection should comply to following requirements:

  1. Always have at least 1 item, defining "no area" region. This item should always have ID = 0 and cannot be removed.
  2. Maximal item count is defined once on collection creation and corresponds to number of regions of the given type the engine supports (currently 256).

(It is also possible to merge region collection with appropriate mask object at some point.)

Those collections may then be exposed as "Browseable" properties to make them readable and editable by end-user.
Those properties will need a property editor presumably derived from System.ComponentModel.Design.CollectionEditor. The default UI implementation will not fit the requirements very well, because it does not provide a way to restrict amount of added items (meaning, user may keep pressing "Add" button even though collection is at its maximal capacity, which will lead either to exceptions or other confusing behavior); it does let restrict removal of "Region 0", but I am not sure it will let prevent its re-positioning in the list. This means that the new property editor UI should be implemented too.

Barn Runner 5-2 fails

./ags ~/games/BR5_Game_2/Barn\ Runner\ 5-2.exe

AGS: Initialize gfx
AGS: Load game data
Script link failed: Runtime error: unresolved import 'OtherRoomObjectOn'

Editor room loading code requires debugging and testing

I've identified a couple of issues with my porting of the room (CRM file) loading code from the native assembly to the editor assembly (multi_room_edit branch only). The latest commit has the following identified issues:

  • Broken C# implementation of String::Read is causing massive overflow while reading. (Fixed, not committed)
  • C#'s Encoding.ASCII.GetString is not null-truncating strings, leading to very strange and broken results. (Fixed, not committed)
  • C# implementation of LoadLZW is throwing invalid argument. Requires further investigation.

If any one else has a chance to look at the code, please let me know what else I may be doing totally wrong. Thanks! -monkey

stupid backup files with whitespaces messing up unix find command

~/cdev/cdev/ags[refactory]$ find . -name '.c' | xargs grep blah
grep: ./Editor/AGS.Editor/Panes/RoomEditFilters/Copy: No such file or directory
grep: of: No such file or directory
grep: HotspotsEditorFilter.cs: No such file or directory

here is the list of culprits:

~/cdev/cdev/ags[refactory]$ find . -name '* *'
./Android/library/AGS Game Launcher.launch
./Editor/AGS.Editor/Resources/Copy of plugin.ico
./Editor/AGS.Editor/Resources/Copy of pluginDisabled.ico
./Editor/AGS.Editor/Panes/RoomEditFilters/Copy of HotspotsEditorFilter.cs
./Documents/AGS Goals.txt

those copy of things shouldnt even be in the source control, and the AGS Goals thing should be fixed not to use whitespace but underscores oslt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.