forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Doom - PS2 Port
Goto page Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development
View previous topic :: View next topic  
Author Message
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Mon Mar 31, 2008 8:57 am    Post subject: Reply with quote

@ttguy

Check PM
Back to top
View user's profile Send private message Visit poster's website
diegox758



Joined: 30 Mar 2008
Posts: 13
Location: Brasil, Sao Paulo

PostPosted: Mon Mar 31, 2008 9:30 am    Post subject: Reply with quote

I wanna learn C+, so i can "waste my time better", the only tool to make programs i know use is "game maker', but i can't use it for the ps2 programming.

Ah, and before i forget, there's a problem with the doom, theres no button u can use to "change to next weapon", even in "Key bindings", you got assign a button for each weapon.
Back to top
View user's profile Send private message
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Tue Apr 01, 2008 7:13 am    Post subject: Reply with quote

ptek wrote:
The graphic library being used tries to detect automatically the TV signal type : NTSC or PAL. Maybe your TV doesn't identify this properly?

I think I just wrote some crap :) I don't know really how the PS2 detects PAL or NTSC, this now looks to me like a rubbish hint. Maybe it's from the power supply frequency or some crystal or other circuitry... I guess if I look at the init of the gsKit I might get a clue.
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Tue Apr 01, 2008 7:20 am    Post subject: Reply with quote

diegox758 wrote:
Ah, and before i forget, there's a problem with the doom, theres no button u can use to "change to next weapon", even in "Key bindings", you got assign a button for each weapon.

This feature is missing from the original Doom and not the PS2 version (I guess the option to change to next weapon was introduced in Quake). But Doom has a key to toggle between two most preferred weapons with ammo (or weapon toggle, I don't recall correctly) - it's on the options / key bindings, i know. It's not exactly the same but it's in my plans to add the feature you ask.
Back to top
View user's profile Send private message Visit poster's website
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Tue Apr 01, 2008 12:20 pm    Post subject: Reply with quote

ptek wrote:
diegox758 wrote:
Ah, and before i forget, there's a problem with the doom, theres no button u can use to "change to next weapon", even in "Key bindings", you got assign a button for each weapon.

This feature is missing from the original Doom and not the PS2 version (I guess the option to change to next weapon was introduced in Quake). But Doom has a key to toggle between two most preferred weapons with ammo (or weapon toggle, I don't recall correctly) - it's on the options / key bindings, i know. It's not exactly the same but it's in my plans to add the feature you ask.


In my own ports of Doom, the controller code adds a next/previous weapon. It's not foolproof as you have to press the button again to skip over "missing" weapons, and when you pick up a new weapon, moving to the next or previous weapon goes to next/prev from the one you WERE holding before you picked up the new weapon. But all in all, it works rather well. No one has ever complained about it. I think I could also fix the issues mentioned above. I'll probably do that on the next revision.
Back to top
View user's profile Send private message AIM Address
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sun Apr 06, 2008 7:40 am    Post subject: Reply with quote

diegox758 wrote:
theres no button u can use to "change to next weapon", even in "Key bindings", you got assign a button for each weapon.

I've just implemented support for selecting previous/next weapon and added these to the key binding option screen (weapons section).

I predefined those with the "square" and "circle" but you can change it to whatever you like.

@JF :
You can ignore weapons that you don't have ammo or don't own. Take a look at the P_SwitchWeapon function to see how this is simple to check.

So, check my blog entry at
http://ps2homebrewing.wordpress.com/2008/04/05/lsdldoom-ps2-update-3/
Back to top
View user's profile Send private message Visit poster's website
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Sun Apr 06, 2008 9:53 am    Post subject: Reply with quote

ptek wrote:

@JF :
You can ignore weapons that you don't have ammo or don't own. Take a look at the P_SwitchWeapon function to see how this is simple to check.


Thanks for the tip. :)
Back to top
View user's profile Send private message AIM Address
diegox758



Joined: 30 Mar 2008
Posts: 13
Location: Brasil, Sao Paulo

PostPosted: Mon Apr 07, 2008 1:37 am    Post subject: Reply with quote

great work man!

and by the way, i was thinking and i have some ideas for next updates

*-Make a Save system where the digits for the name can be the ps2 controller buttons (O /\ L1,etc) and save a file on the USB Root
*-Cheat System

just one more ask,
Are you lsdldoom ps2 compatible with usb keyboards??
can i use any usb keyboard, or just an especific for the ps2??
because i'm thinking in buying a usb keyboard, and i want to to know if i can use in the ps2

'Obrigado'!
Back to top
View user's profile Send private message
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Tue Apr 08, 2008 7:46 am    Post subject: Reply with quote

diegox758 wrote:
and by the way, i was thinking and i have some ideas for next updates

*-Make a Save system where the digits for the name can be the ps2 controller buttons (O /\ L1,etc)

Well this is in my plans too. In fact, I'm working on it since the last update. But there's no need to special characters. It's perfectly possible to assign letters (one ot two may suffice) to one or two buttons, just like Lukasz did on his port which started this thread. The optimal would be to add a virtual keyboard like the VICE emulator but I think may be too much just to enter a filename. There are some issues with the actual code that do the saves (an exception is raised when a cast to long is performed) but this shuold be simple to solve.
Quote:
and save a file on the USB Root

Accodingly to the authors of the USB driver, the write operations weren't enough tested, so there's the risk of data corruption. I may add support to save to USB, but in any way I will be resposible for any data loss...
Quote:
*-Cheat System

Yep maybe in the future.
Quote:
just one more ask,
Are you lsdldoom ps2 compatible with usb keyboards??
can i use any usb keyboard, or just an especific for the ps2??
because i'm thinking in buying a usb keyboard, and i want to to know if i can use in the ps2

I encountered an issue when enabling the USB keyboard when the ELF is executed by launchELF, occuring a freezing - if lauched from ps2client/ps2link it works perfectly (I tested the first port, not this I'm working on). I also had some problems when testing the keyboard driver examples as posted on http://forums.ps2dev.org/viewtopic.php?t=10021 but none reply. I guess nobody have a working compiling enviroment ;)
A word of warning : please to try a USB keyboard with the PS2 before buying. Not all are compatible. There is also a solution to buy a cheap PS2 (plug type, not PlayStation2 ;) ) to USB keyboard converter, so you can use an existent PS2 keyboard and usually this results ok.
Quote:
'Obrigado'!

'De nada, não tens de agradecer.'
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sat Apr 12, 2008 7:55 am    Post subject: Reply with quote

Game saving/loading ability is now working. This uses typically 30KB of the memory card for each slot, so I see no reason to save elsewhere.

Just go the the save/load menu, hit cross button to start entering a filename. At this point, the only possible character that can be typed in is the “Y” letter by hiting the L2 button. I might add some more characters latter, but remember that you’re only typing a description for the save file, not the filename itself, so it really itsn’t that important.

In the source, only minor changes were needed to fix the saving and loading functions. I had to use the IO fio* functions instead of the f* which are overwritten by the ROMFS, so the MC0 wasn’t accessible earlier. I also needed to code the equivalente of the offending expression “*(long*)save_p” where save_p is a pointer to a char buffer. It simply results in an exception, maybe because of the PS2 memory architecture (?)

Get it here :
http://www.4shared.com/file/43802420/973d16aa/lsdldoom-ps2_v004ROMFS.html
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sat Apr 12, 2008 9:07 am    Post subject: Reply with quote

diegox758 wrote:
I just Downloaded lsdldoom-ps2_v001.rar and it does not start

Remeber that you must supply your WAD file and the filename should be lower case (doom.wad, doom2.wad, for example. Doom.wad or DOOM.WAD will not work)
Back to top
View user's profile Send private message Visit poster's website
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Sat Apr 12, 2008 9:29 am    Post subject: Reply with quote

ptek wrote:
I also needed to code the equivalente of the offending expression “*(long*)save_p” where save_p is a pointer to a char buffer. It simply results in an exception, maybe because of the PS2 memory architecture (?)


Doesn't the PS2 have 64 bit general registers, but only 32 bit pointers? I seem to remember that. So long would be 64 bits, but pointers are not 64 bits. It's one of the things the linux folks have fun with. You can treat the pointers as 64 bits, but need to mask off the upper 32 before using them or you have problems. Something like that.
Back to top
View user's profile Send private message AIM Address
Lukasz



Joined: 19 Jan 2004
Posts: 248
Location: Denmark

PostPosted: Sat Apr 12, 2008 5:09 pm    Post subject: Reply with quote

ptek wrote:
I also needed to code the equivalente of the offending expression “*(long*)save_p” where save_p is a pointer to a char buffer. It simply results in an exception, maybe because of the PS2 memory architecture (?)


The problem here is alignment, which is a common hardware limitation on all architectures I know of. In your case you are trying to load a long from a memory address, since the long is 64-bit (8 bytes), the memory address you are loading from needs to be on an 64-bit/8-byte alignment. Which means that address must be dividable 8, eg. 0,8,16,24,... or just x*8. So if you are try load from for instance address 57 you will get an exception. The GCC compiler aligns buffers correctly according to their type, but since you are refering to a char (8-bit) buffer, the compiler can put the buffer where ever it wants, unless you specify the alignment explicitly, see below.

There are a few ways to get around this. One is option is that you can load all the bytes individually and use bit operations SHIFT and OR to get the full value. Another possiblity is to align the memory address you are reading from, which can be done with the macro defined in kernel.h
Code:
#define ALIGNED(x) __attribute__((aligned((x))))

So in order to align a char buffer you could do.
Code:
char buffer[1024] ALIGNED(8);

If the buffer is allocated at runtime, you can use memalign from malloc.h instead
Code:
char *buffer = memalign(8, 1024)

Just remember that even if you align, you can still only refer to 8 byte aligned address, so in the case below, OFFSET has to be a multiple of 8.

Code:
 long *ptr = (long*)&buffer[OFFSET]


The aligment limitation is very common, you will see it in all the RPC code in PS2SDK, as the SIF DMA channels require transfer data to be 64-byte aligned.

J.F. wrote:
Doesn't the PS2 have 64 bit general registers, but only 32 bit pointers?


As for the general purpose registers (GPR), they are actually 128-bit, which can utilized with the multimedia instructions (MMI). There are arithmetic instructions for 64-bit, however addressing is in 32-bit.

Since most people use 32-bit int for integer values in their programs, GCC generates 32-bit MIPS code (like IOP) for the most part of EE programs, which I believe is MIPS III / R3000.

So for 32-bit only EE programs, you could just aswell use the IOP compiler for EE, however parts of PS2SDK are optimized for the the MMI instructions and use 64-bit arithmetic operations, so you need to makes changes in PS2SDK in order to link with it. The generated code by the IOP compiler would be EE compatible though ;-)
_________________
Lukasz.dk
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sat Apr 12, 2008 8:16 pm    Post subject: Reply with quote

Lukasz wrote:
There are a few ways to get around this. One is option is that you can load all the bytes individually and use bit operations SHIFT and OR to get the full value.
Yep, that's what I did.
Also in the code I saw some LONG and SHORT macros that result in "(long int)(x)" and "(short int)(x)" respectively. It looks to me like normal casts, are they really harmless? As you already experienced, there is somewhere a bug in the code that results in an exception and I remember to see some corrupted visuals during gameplay sometimes... The exception occurs in apparent innocuous line (r_things.c) :
Code:
void R_DrawMaskedColumn(const column_t *column)
{
  int     topscreen;
  int     bottomscreen;
  fixed_t basetexturemid = dc_texturemid;

  dc_texheight = 0; // killough 11/98
  while (column->topdelta != 0xff)           // ptek : crash here
    {
      // calculate unclipped screen coordinates for post
      topscreen = sprtopscreen + spryscale*column->topdelta;

I used ee-address2line to locate this after compiling all with -g at EE_CFLAGS and the exception always occurs here.
Back to top
View user's profile Send private message Visit poster's website
Lukasz



Joined: 19 Jan 2004
Posts: 248
Location: Denmark

PostPosted: Sat Apr 12, 2008 8:59 pm    Post subject: Reply with quote

You need to find out what calls R_DrawMaskedColumn, since the const column_t *colum parameter is probably pointing at an illegal address. What BadVAddr do you get?

I'm suspecting bad memory management in the Doom port or maybe its not 100% compatible with the way PS2SDK handles memory.

Edit: I looked into the source, the column addresss changes in the while loop (not so pretty offset memory address calculation, maybe a problem with magic 4 constant?), printf it for each iteration in the loop and see when becomes illegal and then backtrack the cause.
_________________
Lukasz.dk
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sun Apr 13, 2008 4:49 am    Post subject: Reply with quote

I added printf to the loop, so immediately after the " column = (const column_t *)( (byte *)column + column->length + 4); " line, I put :
Code:
printf("column :           %p\n", column);

Is the %p the right way to print pointers, right?

So I've got different column addresses and BadVAddr for the same crash at EPC :

column : 0x014A1061
Cause 30008010 BadVAddr fb5e23aa Status 70030c13 EPC 00119e40

column : 0x0145CD38
Cause 30008010 BadVAddr ff0ba777 Status 70030c13 EPC 00119e40

are two examples.

What are the valid address limits? The PS2 has 32MB RAM, so the upper address should be 0x2000000 - 1, or isn't the whole 32MB range available?
Back to top
View user's profile Send private message Visit poster's website
diegox758



Joined: 30 Mar 2008
Posts: 13
Location: Brasil, Sao Paulo

PostPosted: Sun Apr 13, 2008 6:57 am    Post subject: Reply with quote

Great job man, im really excited about doom on ps2, it's really a good idea, i'm so sorry that i just can't help on this work!

'Adeus!'
Back to top
View user's profile Send private message
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sun Apr 13, 2008 7:22 am    Post subject: Reply with quote

diegox758 wrote:
Great job man

All the hard work was done by Jason Yu's when porting lsdlDoom to the PS2. I'm just adding some features and do some fixing.
Back to top
View user's profile Send private message Visit poster's website
Lukasz



Joined: 19 Jan 2004
Posts: 248
Location: Denmark

PostPosted: Sun Apr 13, 2008 4:52 pm    Post subject: Reply with quote

I had a look inside the source and tried out a few things without any luck on tracking down the bug.

I tried adding -DRANGECHECK to the EE_CFLAGS, with the result that instead of crashing, Doom exists with "R_DrawSpriteRange: bad texturecolumn" error in r_things.c.

I dont thing the bug is necessarily in the R_DrawMaskedColumn, it just happens to crash there, because of bad data in memory, which might have been caused some place unrelated to this function, the possibilities are endless.

Finding the bug could take hours or days, but would definitely require to one to understand and debug the game logic. And who knows if there are similar bugs which might appear, if and after this one gets fixed. So you might end up fixing 10 of these bugs, each taking days to track down.

So it might be worth the effort to just try to enable sound in my port, either by the same means as in Jason Yu's port or try to add support in SDL / audsrv for the missing sound support required by Doom.

Which way to go from here all depends on what task one wants to take up to get it working correctly. I'd personally go for extending SDL / audsrv, because then others could also benefit from the work you have done. Instead of limiting your hard work to just one specific program/port, and doing the same work over and over again for other ports. If you choose this direction, I'd recommend just making a small SDL sample which tries to play sound the same way Doom does, as this will be easier to test and debug.
_________________
Lukasz.dk
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sun Apr 13, 2008 8:20 pm    Post subject: Reply with quote

Lukasz wrote:
Which way to go from here all depends on what task one wants to take up to get it working correctly. I'd personally go for extending SDL / audsrv, because then others could also benefit from the work you have done. Instead of limiting your hard work to just one specific program/port, and doing the same work over and over again for other ports. If you choose this direction, I'd recommend just making a small SDL sample which tries to play sound the same way Doom does, as this will be easier to test and debug.

Yes I agree with you. The bug's behaviour is a bit odd, since it almost never happens if using the ROMFS and it surely happens if loading the doom1.wad from host or mass - maybe the ROMFS stores the data in RAM at a "safe" from bug's bombings address range.
I already thought on reproducing the Yu's sound routines to your port but maybe the SDL approach would be more useful to others as you say. As little I saw earlier, the SDL itself does mixing and the sound code on Doom also does mixing ... But i'll look more carefully to what SDL can do for audio.
Back to top
View user's profile Send private message Visit poster's website
diegox758



Joined: 30 Mar 2008
Posts: 13
Location: Brasil, Sao Paulo

PostPosted: Mon Apr 14, 2008 2:16 am    Post subject: Reply with quote

Is there a "You Supply the WAD" of the 004 version?
Back to top
View user's profile Send private message
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Mon Apr 14, 2008 2:53 am    Post subject: Reply with quote

diegox758 wrote:
Is there a "You Supply the WAD" of the 004 version?

Get it here
http://www.4shared.com/file/43802147/59c8e664/lsdldoom-ps2_v004.html
Back to top
View user's profile Send private message Visit poster's website
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Mon Apr 14, 2008 2:57 am    Post subject: Reply with quote

The wisest to do is like JF said, start porting the prboom variant, since it supports custom WADs. I'll look for it soon since it uses SDl so the sound part could be already made, who knows.

Hey JF, sooner or later we have to start making a port ;)
In the meanwhile, I'll look for SDL audio in Lukasz port, maybe getting it from prboom... The work is not going to be a waste and besides it's a good exercise.
Back to top
View user's profile Send private message Visit poster's website
diegox758



Joined: 30 Mar 2008
Posts: 13
Location: Brasil, Sao Paulo

PostPosted: Mon Apr 14, 2008 6:13 am    Post subject: Reply with quote

ptek wrote:
The wisest to do is like JF said, start porting the prboom variant, since it supports custom WADs

I think is a great idea!! and it not only support custom WADs, but PrBoom have a lot of features like:

Playing the game
-Supports loading dehacked files at the command line, or in WADs
-Supports PWADs containing sprites and flats
-Save games and demos completely store game parameters
-Savegames store list of loaded WAD files, warning if wrong files loaded
Game engine
-Player bobbing improved, optional
-Friction effects , affecting players and monsters
-Wind, current, conveyor effects
-Far more flexible scrolling wall/floor types
-Always run
-Weapon change logic overhauled and improved
-Support for friendly monsters, helper dogs
-Monster target finding code improved
-AI improvements
-Bouncy and touchy things
-New code pointers
-Per-level and animated skies
-Generalised line types system gives complete flexibility
-Elevators
-Translucent sprites, walls
-Independent floor and ceiling lighting
-Silent teleports
-Deep water, true underwater areas
-Icon of Sin telefragging made more consistent
-Fix large numbers of game bugs
-Support arbitrary texture heights

'E lá vamos nós!' (in English: Here we Go!)
_________________
Never think that Brasil is just "Jungles"
There's city, there programmers and lot of things there are on other countries.
Back to top
View user's profile Send private message
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Mon Apr 14, 2008 7:03 am    Post subject: Reply with quote

I've already downloaded the latest prboom-plus code and have been looking it over with an eye towards what needs to be done. I'd like to have both a PSP and a PS2 version that were in sync as to features and such. That would be nice - being able to play the same version on the PS2, PSP, or the PC. :)
Back to top
View user's profile Send private message AIM Address
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Mon Apr 14, 2008 7:59 am    Post subject: Reply with quote

J.F. wrote:
I've already downloaded the latest prboom-plus code and have been looking it over with an eye towards what needs to be done. I'd like to have both a PSP and a PS2 version that were in sync as to features and such. That would be nice - being able to play the same version on the PS2, PSP, or the PC. :)

hmm .. I wasn't aware of a plus version.
Back to top
View user's profile Send private message Visit poster's website
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Mon Apr 14, 2008 8:48 am    Post subject: Reply with quote

ptek wrote:
J.F. wrote:
I've already downloaded the latest prboom-plus code and have been looking it over with an eye towards what needs to be done. I'd like to have both a PSP and a PS2 version that were in sync as to features and such. That would be nice - being able to play the same version on the PS2, PSP, or the PC. :)

hmm .. I wasn't aware of a plus version.


I posted that earlier in the thread. Again, the link is

http://prboom-plus.sourceforge.net/

and the current version is 2.4.8.2 released last Oct 16.
Back to top
View user's profile Send private message AIM Address
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Fri May 02, 2008 8:44 pm    Post subject: Reply with quote

Some updates :

I fixed some issues preventing the configuration loading at startup and saving at exit, so at last you can permanently backup your Doom configuration. The config file is saved at memory card 1 (mc0:DOOM/boom.cfg) when exiting using the Quit option from de menu.

I also added the option to force a specific display mode (PAL or NTSC) for whom needs it - So just rename the DOOM.ELF to something ending with PAL or NTSC at the name (for example : DOOM_PAL.ELF or DOOM_NTSC.ELF).

Besides the bug that plagues this port, I find now the port quite usable.

Get here the shareware WAD embedded ELF (recommended) :
sdldoom-ps2_v005ROMFS.rar

or the you-supply-the-wad version (more unstable) :
sdldoom-ps2_v005.rar

Now source is included in all releases.

About the future of this port : I'm still going to hunt for the bug that crashes this port but I pretend to implement SDL sound support into the Lukasz port and/or adapt this version's sound sources to his port. But I also think the future is named "prboom" (plus maybe) so this should be the future for Doom in the PS2. I'll probably look now at the prboom sound sources since it uses SDL, so those may be directly appliable.

Since this forums are for development, I guess this would be the last time I'll announce added features. So, futher news about this port will be posted only on http://ps2homebrewing.wordpress.com

But I guess any other improvements on Lukasz port or porting prboom or technical help requests will be posted here. I'll try to keep posting to a minimum :)


Last edited by cosmito on Sat May 03, 2008 8:17 pm; edited 1 time in total
Back to top
View user's profile Send private message Visit poster's website
J.F.



Joined: 22 Feb 2004
Posts: 2906

PostPosted: Sat May 03, 2008 6:01 am    Post subject: Reply with quote

Uhhh - both links point to the same file.
Back to top
View user's profile Send private message AIM Address
cosmito



Joined: 04 Mar 2007
Posts: 314
Location: Portugal

PostPosted: Sat May 03, 2008 8:18 pm    Post subject: Reply with quote

Oops... Fixed now.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PS2 Development All times are GMT + 10 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 2 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group