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.


Messages - shmerl

Pages: 1 2 3 [4]
46
Quest for Infamy / Re: Re: Get 50% off QFI Soundtrack this weekend!
« on: October 26, 2014, 03:27:49 PM »
Also many tracks were rendered on my old system and I don't have many of the original masters left (damn hard drive crashes and I'm lazy at backing up) If it makes any audiophiles feel better, the originals were rendered at 24bit so there is minimal loss at the MP3 conversion stage.

But you did produce a CD from the originals? I guess that's as good as it can get if there isn't anything else, so you can create lossless FLACs from that CD for example. I think even if you create transparent MP3 (i.e. 320 Kbps one), when you reencode from that into another lossy codec, the quality will drop. And I usually prefer to create smaller sized files using modern codecs like Opus (for example with 140 Kbps which is roughly a transparecny level for Opus). I.e. FLAC is not so much for audiophiles who prefer better sounding record (320 Kbps MP3 sounds exactly the same), but for those who prefer to have more control over the lossy format for example for reducing the size of the mobile library and so on.

I.e. I usually see it like this. I buy the album in lossless FLAC, and then encode it in Opus (at 140 Kbps which gives transparency and sound exactly the same as FLAC). Then I keep both, and use Opus for example in my mobile devices. Keeping FLAC is good since if tomorrow some codec XYZ comes out which is even better than Opus (for example produces smaller files on transparecny level or has even lower CPU usage and so on), I just can encode those FLACs into that XYZ. But if you have the music in lossy only, it will have to stay in that form forever in order not to lose quality.

47
Quest for Infamy / Re: Re: Get 50% off QFI Soundtrack this weekend!
« on: October 26, 2014, 12:25:52 PM »
The format is 320kbps MP3s, and is HIGHLY recommended.

Will you consider releasing it as FLAC? I usually prefer using other codecs than MP3 (mostly Opus), but reencoding even from transparent MP3 will reduce quality. Reencoding from FLAC to anything gives an option to keep it transparent.

If hosting is an issue, you can for example sell it through Bandcamp. That's how Volgarr the Viking project did it for example. There shouldn't be a serious reason not to sell FLAC these days.

48
Quest for Infamy / How to avoid keyboard capture in AGS on Linux?
« on: October 21, 2014, 10:03:16 PM »
I'm playing Quest for Infamy on Linux. Doing it in fullscreen mode captures all keyboard events, so I can't switch out of the application with Alt+Tab, and even virtual desktop switching doesn't work. Switching to tty works, so one can minimize the game or switch virtual desktops from there using wmctrl, but that's a rather crude workaround. Are there easier ways to prevent full keyboard capturing or just easier switching out from the application?

49
Banter and Chit-Chat! / Re: What is your favorite rpg series?
« on: October 19, 2014, 10:10:42 PM »
Adventure and RPG are sister genres anyway. And RPG can be rather loosely defined at times. For example classic RPGs (D&D style) usually provide an option to customize your character quite widely, while classic adventures usually have strictly predefined character to play. On the other hand some games mix these aspects in various proportions. Like already mentioned above Planescape Torment and The Witcher which have elaborate predefined characters (adventure style) but still have a lot of RPG aspects.

Out of "shooter" styled RPGs another good example is Deus Ex (which is RPG much more than a FPS). It has an interesting story which is well developed and it also offers character customization RPG-style and different choices in the game. Another interesting example is The Shadow Warrior remake. While it's a "shooter / hack-n-slash" but the story there is very good and RPG character customization elements are there too.

Ah, and I of course forgot to mention my another RPG favorite - Vampire The Masquerade - Bloodlines.

50
Banter and Chit-Chat! / Re: What is your favorite rpg series?
« on: October 19, 2014, 09:08:21 PM »

how the HELL did i also forget witcher!


The series is a good example of the games which combine action, adventure and RPG genres. And they are heavy on the story with choices and consequences. So I'd say those who like classic RPGs appreciate these games too. But they of course draw a lot from the Witcher books, which provide a wealth of background for them to build on.

51
Banter and Chit-Chat! / Re: What is your favorite rpg series?
« on: October 19, 2014, 10:57:16 AM »
The Witcher Series is one of my favorites.

53
I made a rough workaround. The problem is in AGS when it unlocks a mutex which wasn't locked (that's invalid behavior really that crashes with new glibc on CPUs with TSX).

Here is a patch:

Code: [Select]
diff --git a/Engine/util/mutex_pthread.h b/Engine/util/mutex_pthread.h
index c211dc4..ef04ace 100644
--- a/Engine/util/mutex_pthread.h
+++ b/Engine/util/mutex_pthread.h
@@ -27,28 +27,36 @@ class PThreadMutex : public BaseMutex
 {
 public:
   inline PThreadMutex()
+  :
+   lock_last(false)
   {
     pthread_mutex_init(&_mutex, NULL);
   }
 
   inline ~PThreadMutex()
   {
-    Unlock();
+    // Shmerl: to prevent invalid unlocking (which segfaults on CPUs with TSX, like Haswell).
+    if (lock_last) Unlock();
     pthread_mutex_destroy(&_mutex);
   }
 
   inline void Lock()
   {
     pthread_mutex_lock(&_mutex);
+    lock_last = true;
   }
 
   inline void Unlock()
   {
     pthread_mutex_unlock(&_mutex);
+    lock_last = false;
   }
 
 private:
   pthread_mutex_t _mutex;
+  // Shmerl: Rough workaround - indicates what method was called last for the destructor
+  // Not strictly thread consistent, but should be enough for the destructor case
+  bool lock_last;
 };
 
 typedef PThreadMutex Mutex;

The fix isn't really good for the engine itself, since it uses a variable which isn't bound to the mutex. So if some other thread messes it up, it can theoretically become inconsistent. But it's enough for the Quest for Infamy case. More properly it should probably check if mutex is not in the unlocked state before unlocking it. I'm not an expert on pthreads really, but there might be a way to do it.

I'll file a bug to the AGS bugtracker about this.

UPDATE: Bug report: https://github.com/adventuregamestudio/ags/issues/195

54
Similar issues reported:

https://bugzilla.novell.com/show_bug.cgi?id=853311
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=750792
https://bugzilla.redhat.com/show_bug.cgi?id=1059418

The problem is exposed with new glibc and it's processor specific (happens on Haswell CPUs or later I guess, i.e. those which have TSX instructions: https://en.wikipedia.org/wiki/Transactional_Synchronization_Extensions).

My processor is Haswell, so it makes sense that it's affected.

55
I built AGS with -O0 and run the game with it from gdb. Here is a more detailed backtrace:

Code: [Select]
Program received signal SIGSEGV, Segmentation fault.
__lll_unlock_elision (lock=0x979970, private=0) at ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c:29
29      ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c: No such file or directory.
(gdb) bt
#0  __lll_unlock_elision (lock=0x979970, private=0) at ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c:29
#1  0x0000000000562968 in AGS::Engine::PThreadMutex::Unlock (this=0x979968) at ../Engine/util/mutex_pthread.h:47
#2  0x00000000005628d5 in AGS::Engine::PThreadMutex::~PThreadMutex (this=0x979968, __in_chrg=<optimized out>) at ../Engine/util/mutex_pthread.h:36
#3  0x00000000005675b3 in SOUNDCLIP::~SOUNDCLIP (this=0x979910, __in_chrg=<optimized out>) at media/audio/soundclip.cpp:73
#4  0x000000000056495e in stop_and_destroy_channel_ex (chid=3, resetLegacyMusicSettings=true) at media/audio/audio.cpp:499
#5  0x0000000000564a22 in stop_and_destroy_channel (chid=3) at media/audio/audio.cpp:521
#6  0x0000000000563e01 in find_free_audio_channel (clip=0x153c070, priority=50, interruptEqualPriority=true) at media/audio/audio.cpp:202
#7  0x00000000005646de in play_audio_clip (clip=0x153c070, priority=50, repeat=0, fromOffset=0, queueIfNoChannel=false) at media/audio/audio.cpp:435
#8  0x0000000000521d25 in AudioClip_Play (clip=0x153c070, priority=31998, repeat=31998) at ac/audioclip.cpp:57
#9  0x0000000000564797 in play_audio_clip_by_index (audioClipIndex=321) at media/audio/audio.cpp:452
#10 0x00000000005366b5 in CheckViewFrame (view=646, loop=0, frame=10) at ac/viewframe.cpp:154
#11 0x00000000004cf8ff in RoomObject::UpdateCyclingView (this=0x8e3048 <troom+8>) at ac/roomobject.cpp:76
#12 0x000000000055a56c in update_cycling_views () at main/udpate.cpp:199
#13 0x000000000055b301 in update_stuff () at main/udpate.cpp:463
#14 0x000000000055dd0b in game_loop_do_update () at main/game_run.cpp:543
#15 0x000000000055e13f in mainloop (checkControls=true, extraBitmap=0x0, extraX=0, extraY=0) at main/game_run.cpp:711
#16 0x000000000055e4ac in main_game_loop () at main/game_run.cpp:840
#17 0x000000000055e5a4 in do_main_cycle (untilwhat=2, daaa=9077320) at main/game_run.cpp:885
#18 0x00000000004f793e in scrWait (nloops=120) at ac/global_game.cpp:924
#19 0x000000000050ce02 in Sc_scrWait (params=0x7fffffffd2d0, param_count=1) at ac/global_api.cpp:2175
#20 0x000000000057425e in ccInstance::Run (this=0x1ef4b10, curpc=31) at script/cc_instance.cpp:1174
#21 0x0000000000571c68 in ccInstance::CallScriptFunction (this=0x1ef4b10, funcname=0x968500 <scfunctionname> "room_AfterFadeIn", numargs=0, params=0x0) at script/cc_instance.cpp:368
#22 0x0000000000574cc4 in ccInstance::RunScriptFunctionIfExists (this=0x1ef4b10, tsname=0x968500 <scfunctionname> "room_AfterFadeIn", numParam=0, params=0x0) at script/cc_instance.cpp:1390
#23 0x0000000000574e2f in ccInstance::RunTextScript (this=0x1ef4b10, tsname=0x1fd4db0 "room_AfterFadeIn") at script/cc_instance.cpp:1435
#24 0x000000000056da43 in run_interaction_script (nint=0x1f1d900, evnt=7, chkAny=-1, isInv=0) at script/script.cpp:227
#25 0x00000000004d4860 in process_event (evp=0x7fffffffdd84) at ac/event.cpp:208
#26 0x00000000004d523c in processallevents (numev=6, evlist=0x8a7940 <event>) at ac/event.cpp:404
#27 0x00000000004d527f in update_events () at ac/event.cpp:414
#28 0x000000000055de8e in game_loop_update_events () at main/game_run.cpp:600
#29 0x000000000055e16c in mainloop (checkControls=true, extraBitmap=0x0, extraX=0, extraY=0) at main/game_run.cpp:721
#30 0x000000000055e4ac in main_game_loop () at main/game_run.cpp:840
#31 0x000000000055b5e2 in do_play_game () at main/game_start.cpp:141
#32 0x000000000055b6c0 in initialize_start_and_play_game (override_start_room=0, loadSaveGameOnStartup=0x0) at main/game_start.cpp:182
#33 0x0000000000554cd2 in initialize_engine (argc=2, argv=0x7fffffffe0d8) at main/engine.cpp:1463
#34 0x0000000000560384 in main (argc=2, argv=0x7fffffffe0d8) at main/main.cpp:492

56
Thanks for the detailed report! I'm sorry about the crash... it was tested on Testing, but of course things change, and more work needs to be done.  I'll take a look and try to get a test build out to you.

Thanks. As some recommended, I built ags from the current source, but how can I run the game with it?

:)

pm me if ya need any further assistance  im not up to par on my newest or every ver of linux but i do know thats a memory issue usually

oh and try this

use bitmaps instead of video bitmaps, using buffering.

I'm completely new to the game and AGS, and didn't know about the later until today :) So most of what you said just went over my head. I guess you meant AGS itself? Or the game itself is open source and one can compile it?

57
Hi.

I recently bought Quest for Infamy from GOG, and trying to run the Linux version on current Debian testing (x86_64). The game keeps crashing with segfault after choosing "Prelude" or "Start" in the first menu.

Here is the tail of the AGS output:

Code: [Select]
AGS: Room change requested to room 315
AGS: Unloading room 309
AGS: Loading room 315
AGS: Room change requested to room 302
AGS: Unloading room 315
AGS: Loading room 302
AGS: Room change requested to room 340
AGS: Unloading room 302
AGS: Loading room 340

Shutting down Allegro due to signal #11
Segmentation fault

And here is the game run with gdb:

Code: [Select]
Program received signal SIGSEGV, Segmentation fault.
 __lll_unlock_elision (lock=0x1f1e910, private=0) at ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c:29
 29 ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c: No such file or directory.
 (gdb) bt
 #0 __lll_unlock_elision (lock=0x1f1e910, private=0) at ../nptl/sysdeps/unix/sysv/linux/x86/elision-unlock.c:29
 #1 0x0000000000531acc in SOUNDCLIP::~SOUNDCLIP() ()
 #2 0x000000000052d4e1 in stop_and_destroy_channel_ex(int, bool) ()

What can be the problem and how can I help debugging it?

My configuration:
OS: Debian testing Linux (x86_64)
Kernel: 3.16.3-2
Video driver: Nvidia closed driver 343.22.
DE: KDE 4.14
Audio: PulseAudio.

Corresponding thread on GOG forum: https://www.gog.com/forum/quest_for_infamy/problems_with_the_linux_version_of_quest_for_infamy

Pages: 1 2 3 [4]