tag:blogger.com,1999:blog-86886872380934257432024-03-13T02:30:48.607+00:00MaLiK's programmingUnknownnoreply@blogger.comBlogger19125tag:blogger.com,1999:blog-8688687238093425743.post-12996174467418928712013-11-26T15:31:00.000+00:002013-11-26T15:31:04.885+00:00Commandos BTCOD windowed on 32 bit dekstopI got tired with switching to 16 bit desktop to be able to run BTCOD in windowed mode. So with bunch of lines of C++ code here it's. Additional feature is full-screen console with Lua interpreter and some game engine features available from Lua script. I had to implement DisplayDevice interface and provide some simple methods to create and resize game window, locking/unlocking primary drawing surface. With this new SdlDisplayDevice I was finally able to use quake-like console in the game window. You probably remember that previously it had to be in separate window. But that's not all. There is Lua script interpreter running and there are some features available. Just as proof of concept one can check current game engine state, select character and check some character attributes like type , name from the Lua script. More to come. Enjoy the video.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i1.ytimg.com/vi/6km7XUqS_1c/0.jpg"><param name="movie" value="http://www.youtube.com/v/6km7XUqS_1c?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="640" height="532" src="http://www.youtube.com/v/6km7XUqS_1c?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-8927360328395942732013-11-26T15:07:00.000+00:002013-11-26T15:07:11.626+00:00Code Injection through dynamic library<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link>
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js" type="text/javascript"></script>
<script language="javascript">
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>
<br />
<h2>
</h2>
<div>
<br /></div>
<div>
Inspired by <a href="http://wiki.oni2.net/Anniversary_Edition">Oni Mod Anniversary Edition</a> I started playing with code injection. My usual target is my favorite game <a href="http://en.wikipedia.org/wiki/Commandos_(series)">Commandos</a> Beyond the Call of Duty. I've bought original box version long time ago. My first goal was ability to reuse existing binary executable. It's easier to modify if you can see immediate result. I've start with few failed attempts of using game executable as dll library. I was able to load exe file as library using LoadLibrary Win32 Api call, but load address was always random, without proper reloc segment in exe file it's not possible to use any code from that binary directly, and reconstructing entire reloc segments seemed as impossible task. So I've change my approach. Instead of using binary as dll I decided to create my shared library and inject custom code into starting process. There is an easy way to do that on Windows. One have to create dll library with the same name as one used by executable. In my case coman_mp.exe uses ddraw.dll. Created library have to provide list of exported functions. Fortunately game binary (coman_mp.exe) uses only one functions from ddraw.dll (DirectDrawCreate).<br />
This approach is based on assumption that game binary will be loaded and fully initialized before any of dynamic libraries required by this binary. During the loading and dynamic linking stage system loader will look for required dynamic libraries in current working directory. So it's enough to create dll that provides DirectDrawCreate function and dummy IDirectDraw interface implementation and store it in the same directory where game binary is.<br />
Code sample presents dynamic library source.<br />
<pre class="brush:cpp">
#include <windows.h>
struct LPDIRECTDRAW;
struct IUnknown;
HRESULT WINAPI DirectDrawCreate(GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter)
{
return 1;
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved)
{
switch (reason) {
case DLL_PROCESS_ATTACH:
// At this point game binary is loaded and initialized
// we can start patching
break;
case DLL_THREAD_DETACH:
break;
}
return true;
}
</pre>
<br />
End of part one.<br />
This was just very simple introduction to story about my work with Commandos BTCOD game binary.<br />
<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-4382231403141879592013-06-16T23:26:00.002+01:002013-06-16T23:26:17.793+01:00Mission editor with visible patrol routes<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/VXlJYNEoehA?feature=player_embedded' frameborder='0'></iframe></div>
<br />
One more but small improvement to BTCOD mission editor. Now it's possible to see patrol routes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxmC-KYxJpCV2JCD3QrELn04tsqb-028-Um0V9bPNa3SgntNMyH7yzrDUYtj55V5R8eogioaYU5hppymKgoy_ZvQfY4aWVYEAgpJlkv2pFZZY7aXwYG1PlLAU9TUEKvR5gSmBZlyChzD4/s1600/debug_console.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxmC-KYxJpCV2JCD3QrELn04tsqb-028-Um0V9bPNa3SgntNMyH7yzrDUYtj55V5R8eogioaYU5hppymKgoy_ZvQfY4aWVYEAgpJlkv2pFZZY7aXwYG1PlLAU9TUEKvR5gSmBZlyChzD4/s320/debug_console.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDmlJ9zX7RD6pjJ69coJA57ztEVStV2vOjRUIthrY-hsBUC2_eVUSurB_ZO3L0_nfykiSaazdfcqYxGkHSYDKyQeoo_LAehsmF8FRo0jwZWKxUV_0BRZcGUrjizHYSo3dViIhQjDt1BU/s1600/visible_patrol_routes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDmlJ9zX7RD6pjJ69coJA57ztEVStV2vOjRUIthrY-hsBUC2_eVUSurB_ZO3L0_nfykiSaazdfcqYxGkHSYDKyQeoo_LAehsmF8FRo0jwZWKxUV_0BRZcGUrjizHYSo3dViIhQjDt1BU/s320/visible_patrol_routes.jpg" width="320" /></a></div>
<br />
Also there is possibility to use debug console. Check first image. It's also usable from Lua scripts.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-17520471762804915732013-04-09T23:21:00.001+01:002013-04-09T23:21:16.205+01:00Commanods BtCoD deadly flamethrower<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/qGHuydxwCNM?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Finally flamethrower can be used to kill Nazis. Last step will be creating proper flame animation.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-40245733354370511282013-04-04T00:37:00.002+01:002013-04-04T00:37:21.863+01:00BtCoD flamethrower part 2<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/f5WcNtJ--Ns?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Finally flamethrower is almost usable. Now proper character animation is used. Check the video. One thing still missing proper flame animation. Anyone interested in making one. Let me know.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-57514275909092511092013-03-27T23:19:00.000+00:002013-03-27T23:20:10.153+00:00Strike in Narrow Path built-in editor<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfkwFr_IkVShNO4C-zaWwOm4j1NX60jyGxlhZjirUCNFBKE-csaP9wPHJ4N4vt8jL7OIubNOt2v8tdldHH5FPpVqZyPEKeBkzSn8BuLNsrVhd0p53G8mrgXhi31L9kObh5BI0wyr4hpp4/s1600/sinp_built_in_editor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfkwFr_IkVShNO4C-zaWwOm4j1NX60jyGxlhZjirUCNFBKE-csaP9wPHJ4N4vt8jL7OIubNOt2v8tdldHH5FPpVqZyPEKeBkzSn8BuLNsrVhd0p53G8mrgXhi31L9kObh5BI0wyr4hpp4/s320/sinp_built_in_editor.png" width="320" /></a></div>
<br />
This time I was able to use built-in editor in Commandos BEL mod called Strike In Narrow Path. It's pretty similar to that one found in Commandos BTCOD. If you wanna try it just download <a href="http://forums.revora.net/index.php?app=core&module=attach&section=attach&attach_id=32135">SINP ddraw.dll</a> and put it in the directory with SINP binary. It will work only with SINP 2.3 english version.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-79927862239499869692013-03-12T23:45:00.001+00:002013-03-12T23:45:48.742+00:00BCoD flamethrower in action<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/lWK75BI2KGw?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Another small step made. It's possible to use flamethrower. Proper character animation is still missing. This is still work in progress.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-19305997847517869972013-03-12T00:52:00.002+00:002013-03-12T00:54:28.328+00:00Flamethrower in BCOD<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI4Pje-90JkfJlt67_XI5tfOs8LIyzgjFt0xm-8i3aiSeuLhBsIixG7mW7yI0Rr5MLQwYeL0-nBX117KKLCh0c5Wl3Qmd-0JkqYxQj4rCC3BNi2ECLaBwzJexrIPiYai5bEH5V9RU5G1k/s1600/flamethrower.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI4Pje-90JkfJlt67_XI5tfOs8LIyzgjFt0xm-8i3aiSeuLhBsIixG7mW7yI0Rr5MLQwYeL0-nBX117KKLCh0c5Wl3Qmd-0JkqYxQj4rCC3BNi2ECLaBwzJexrIPiYai5bEH5V9RU5G1k/s1600/flamethrower.png" height="246" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mechanic with flamethrower</td></tr>
</tbody></table>
<br />
It was brought to my attention that there is possibility to use a flamethrower in BCOD. So I started playing with it. As far as I know only Mechanic character has proper animations for it. I found a way how to add it to backpack. It's still not fully usable. Just work in progress.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-77656749848771821282013-03-12T00:49:00.000+00:002013-03-12T00:49:13.240+00:00Commandos BCOD Modding<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheOHff3SNT9vWmWQfYvGOH0T1NUej0YU5bWr_hQB0w9FUgYSgFvAt220RTUCA0iXJkfqSltzTQIBdBZ4VwB8rPiadF3WIvLrt_BLOro_TQI8oEEdUMR7A_FONCB5_6ICyRxl35_h0Ho4E/s1600/bcod_debug.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheOHff3SNT9vWmWQfYvGOH0T1NUej0YU5bWr_hQB0w9FUgYSgFvAt220RTUCA0iXJkfqSltzTQIBdBZ4VwB8rPiadF3WIvLrt_BLOro_TQI8oEEdUMR7A_FONCB5_6ICyRxl35_h0Ho4E/s1600/bcod_debug.png" height="163" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Commandos BCOD with game editor and Lua interpreter.</td></tr>
</tbody></table>
I was playing with some code injection and I was able to inject entire Lua interpreter into existing game. Below you can see some examples of my recent work.<br />
Also I found that some debug options in BCOD were left by developers they have removed just key shortcuts. Current status is that I can use Lua interpreter to investigate and modify state of the game. My plan is to use Lua to extend existing game engine with some fun stuff.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-72013989773277868702009-12-10T19:15:00.004+00:002009-12-10T19:39:35.254+00:00Commandos BEL map viewer<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKjQ3JUTmHogtjXnFcomUBS7Ti21UN56_cxLUF8gvYbPPyZNJIgApRKwpCBXxnQcGwBWJ1mz7NBCgJq7ovlHzY5_WfZ2JzE9gSEq4z3ItwLRhgSVWsBTwqjgDAMNhzQ2coxB0LpEpf8I/s1600-h/vol_viewer_v1.0.1.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDKjQ3JUTmHogtjXnFcomUBS7Ti21UN56_cxLUF8gvYbPPyZNJIgApRKwpCBXxnQcGwBWJ1mz7NBCgJq7ovlHzY5_WfZ2JzE9gSEq4z3ItwLRhgSVWsBTwqjgDAMNhzQ2coxB0LpEpf8I/s320/vol_viewer_v1.0.1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5413690189364241810" /></a><br />
Since two weeks I'm working on Commandos BEL map viewer. Small preview of work status can be seen on the screenshot. There is lot of work to be done, but current result is quite awesome. Also some additional tools are under development such as Commandos image container browser. There is somewhere deep in my mind an idea to about writing open source Commandos game engine.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-45392740565168687982008-11-11T11:34:00.002+00:002008-11-11T11:48:05.351+00:00Koala Painter Qt image pluginYesterday I was playing with Qt plugins and accidentally wrote Koala Painter image plugin for Qt4. It has been tested with Image Viewer available with Qt4 source code. Next step will be to write plugins for other C64 image formats.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-9798542315841199492008-11-06T18:21:00.004+00:002008-11-06T18:27:22.332+00:00Xfce based on Qt toolkitSome time ago i've start writing Qt port of xfce4-panel.<br />Mainly to don't forget how to write programs using Qt toolkit.<br />Now it is in phase pre-alpha (not usable), but works even<br />have few plugin (launcher, show-desktop and action).<br />If i'll have more time, maybe i'll continue the work and<br />the goal will be something similar to xfce only based on Qt.<br />But the question is: Is there anybody who is interested to<br />using something like that?Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8688687238093425743.post-37940648250043729822008-11-06T18:05:00.005+00:002008-11-06T18:16:59.387+00:00Cross makepkgDurning works on my Master Thesis i've create port of makepkg script from ArchLinux distro. I've called it cmakepkg. Now it can compile and build packages for diffrent architecture using installed cross compiler. Using this tool i've successfully build several packages for powerpc architecture.<br /><br />cmakepkg additional features:<br />- saving man, include files are now configurable<br />- config file stored in ~/.config/cmakepkg/<br />- configurable target platform<br />- configurable development envirnoment and path to it<br /><br />Previously i've prepare PKGBUILD'd for cross powerpc development envirnoment, which contains:<br />- binutils<br />- gcc and g++<br />- glibcUnknownnoreply@blogger.com1tag:blogger.com,1999:blog-8688687238093425743.post-52536021700793267462007-12-27T23:00:00.000+00:002007-12-27T23:04:20.506+00:00End of the yearAnother year had past.<br />For me it was a good year.<br />I have learn many new things,<br />and meet very interesting people.<br />My wish for the next year?<br />I want to marry with my beloved Żaneta,<br />write the master thesis, and find a good<br />job.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-25560383485428709922007-09-29T11:27:00.000+01:002007-09-29T11:33:21.379+01:00Very expensive device :)<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvd2Plfub8EUdJ5Wr3pLWGYpKRpqgF5ykiwTfX89Q6cW4ZmNTmCEXhYIPQ0qPUeVuZ-HIIWILSNx65xDod12mel-aawS_LKtt4qU3V01Dkl8CrJGIJQX5ibqndSvyekVyjL8Ru1QEB2j0/s1600-h/DSC00045.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvd2Plfub8EUdJ5Wr3pLWGYpKRpqgF5ykiwTfX89Q6cW4ZmNTmCEXhYIPQ0qPUeVuZ-HIIWILSNx65xDod12mel-aawS_LKtt4qU3V01Dkl8CrJGIJQX5ibqndSvyekVyjL8Ru1QEB2j0/s320/DSC00045.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5115572222092717714" /></a>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-8688687238093425743.post-60169127399893630202007-07-10T11:17:00.000+01:002007-07-10T11:20:09.311+01:00No to zaczynamyRozpocząłem prace nad moją pracą dyplomową.<br />Narazie krótki plan pracy. Niedługo mam otrzymać<br />sprzęt na którym mam pracować. Pierwsze spotkanie<br />z PowerPC. Mam nadzieje że uda mi się do końca wakacji<br />zrealizować większą część pracy. Na bieżąco muszę<br />tworzyć dokumentację (po angielsku). No to do pracy...Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-57096177310644660142007-06-23T11:36:00.000+01:002007-12-27T23:00:17.921+00:00MViewC64About two years ago i have written simple<br />viewer for the C64 computer images.<br />It can read several formats including<br />Koala Painter, FLI, and others.<br />Now i want to write more complex user interface,<br />only if i will have enough time.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-64360044859223454282007-06-20T14:07:00.000+01:002007-07-10T22:30:11.454+01:00Zrzucik<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWiwpsTS4-S17SLJ6pr9iMujQUXX6gIpnW5xlVrmSTC8ulGAbEbQcqALHL2yK2BVu48MCP3SZr69l8bYw_ZSbVTrc1G39w1RDpFZAzsAKRfhPpG9Yp6HCkI9CDFbcaRWTKo8gHmq0-as8/s1600-h/Screenshot.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;"src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWiwpsTS4-S17SLJ6pr9iMujQUXX6gIpnW5xlVrmSTC8ulGAbEbQcqALHL2yK2BVu48MCP3SZr69l8bYw_ZSbVTrc1G39w1RDpFZAzsAKRfhPpG9Yp6HCkI9CDFbcaRWTKo8gHmq0-as8/s320/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5078133140952309346" border="0" /></a><br />Xfce4.4.1 + Gartoons Icon ThemeUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-8688687238093425743.post-83002726539042308592007-06-20T13:53:00.000+01:002007-06-20T13:59:37.018+01:00Początek drogiSiedząc samotnie w prawie pustym uczelnianym<br />korytarzu człowiek zaczyna się zastanawiać<br />"kur... i po co mi to wszystko?". Kumple wyjechali<br />do Irlandii "kroją kasę", a ja się tu męczę.<br />"No i co mi z tego przyjdzie?"<br /><br />Ale jest nadzieja! :)<br />Narazie sza...Unknownnoreply@blogger.com0