• What Do You Need Help With? V6
    7,544 replies, posted
[QUOTE=ZeekyHBomb;42896170]args.length works, assuming you mean the String[]-parameter to main. I don't understand the second question (do you mean first arg, as in what is args[0]? If so, just see next answer). If by that you mean you invoke your program as [i]java MyProg 2.13 4 51231083[/i], then args will be { "2.13", "4", "51231083" }, so yes, args.length is 3 and args[0] = "2.13", args[1] = "4" and args[2] = "51231083".[/QUOTE] That's what I meant, sorry I wasn't clear. I really need to work on articulating my questions. So in theory I could have something like this after the user input: [cpp] if(args.length == 3) x else y [/cpp]
[QUOTE=Duskling;42896158]Can somebody help me out with files in Java? My project structure is as such: project --src ----java files --res ----txt files and stuff I just want to be able to use "res/myfile.txt" as a file path, but I can't figure out how to do this without using an absolute file path. I've looked around and heard alot about using ClassLoader and getResources but I can't figure out how exactly they work. This is the current function I'm using, but want to use relative paths for: [CODE] /** * Recursively list all files and files in subdirectories starting from the given root. * @param path The path of the root file to search. */ public void searchRoot(String path){ File root = new File(path); File[] files = root.listFiles(); for(File file : files){ if(file.isDirectory()){ searchRoot(file.getAbsolutePath()); }else{ results.add(file); } } } [/CODE][/QUOTE] Messing with the ClassLoader sounds awfully complex. Maybe I'm not getting it though. Anyway, you could just prepend the CWD: [code]if(!Path(path).isAbsolute()){ path = System.getProperty("user.dir") + System.getProperty("file.separator") + path; }[/code] [QUOTE=Zinayzen;42896189]That's what I meant, sorry I wasn't clear. I really need to work on articulating my questions. So in theory I could have something like this after the user input: [cpp] if(args.length == 3) x else y [/cpp][/QUOTE] Sure. Simple trial and error could have told you that. The compiler won't bite if you make an error. If it does you should contact the maintainer of your compiler software about that, it's probably not intended behavior.
[QUOTE=ZeekyHBomb;42896457]Sure. Simple trial and error could have told you that. The compiler won't bite if you make an error. If it does you should contact the maintainer of your compiler software about that, it's probably not intended behavior.[/QUOTE] I'm not at home, I don't have any way to test it. Was trying to work it out in my head. :< But thanks for the help.
Ah, that explains it. Seemed like an easier and faster solution, but if you have no compiler available.. Well, there are a couple of websites providing a compiler service.
That didn't even occur to me, actually. I'll keep that in mind next time I'm fucking around.
Well, I could do the user.dir but that still won't give me a relative path that starts with the project. EDIT: Doing this: ResourceManager.class.getResource(".") Gives me this path: /E:/dev/dogl/bin/dogl/ Which I can't use because for some reason there is a slash in front of it, and it starts in the bin/dogl folder rather than just the src folder.
[QUOTE=Duskling;42896158]Can somebody help me out with files in Java? My project structure is as such: project --src ----java files --res ----txt files and stuff I just want to be able to use "res/myfile.txt" as a file path, but I can't figure out how to do this without using an absolute file path. I've looked around and heard alot about using ClassLoader and getResources but I can't figure out how exactly they work. This is the current function I'm using, but want to use relative paths for: [CODE] /** * Recursively list all files and files in subdirectories starting from the given root. * @param path The path of the root file to search. */ public void searchRoot(String path){ File root = new File(path); File[] files = root.listFiles(); for(File file : files){ if(file.isDirectory()){ searchRoot(file.getAbsolutePath()); }else{ results.add(file); } } } [/CODE][/QUOTE] I only used the classLoader getResource thing once for a project and I can't really remember why, something to do with the way a jar works and it's internal filesystem or whatever. Weird thing about it was that I didn't specify the folder the (in this case) image was located in, but it worked. This is my project structure for that project, don't mind it please. The image file is located in the images folder yet I don't have to tell the classLoader where to find it. [img]https://dl.dropbox.com/u/5483751/Photos/2013-11-18_00-45-29.png[/img]
I think I figured it out, somewhat. It turns out that doing user.dir does give me a path to my project. This should work just fine for now, but I'll see if I run into any more issues. Thanks.
Okay, so this isn't really a "what I need help with," but more of just a general question. What, exactly, is a psuedorandom number generator's period a measure of? Put another way, a 32-bit word Mersenne Twister is said to have a period of 2^19937 - 1. Does that mean that you can create 2^19937 - 1 calls to a MT before the sequence starts repeating itself [b]without changing the seed[/b]? Or does it mean that the absolute maximum sequence that the algorithm creates is 2^19937 - 1 in length, with all possible seeds? The reason I ask is I want to create a system where, when a PRNG is about to start repeating its sequence, the seed is changed so that a new sequence is generated instead. I want to know if the period is a measure of that, or if the period is the absolute maximum number of unique numbers the PRNG can generate. All the documentation I have found on the matter has been a bit fuzzy to me.
It's the first thing. But you will most likely never run into the limit of 2^19937 - 1 numbers. But yeah, if you ever use all those numbers you can change the seed and you will get an entirely different sequence of values.
So now that I've finally got steamworks cooperating with me, I want to try to resurrect Steam TTS, but I have no idea how to do that like DLL importing stuff, does anyone know how? [b]Edit:[/b] wait what it costs money? dammit.
[QUOTE=Adult;42903158][b]Edit:[/b] wait what it costs money? dammit.[/QUOTE] If I remember it correctly, you can implement Steamworks for free if the game you are using it for will be published with no commercial aspects. Something like that.
[QUOTE=whisperity;42903317]If I remember it correctly, you can implement Steamworks for free if the game you are using it for will be published with no commercial aspects. Something like that.[/QUOTE] Oh, I forgot to clarify: FonixTalk was the one I was talking about. But now I realize I was being silly because I'm pretty sure it only costs money for commercial products. But I'm still at my original problem, I don't know how to do the dllimport stuff.
[QUOTE=Adult;42903340]I don't know how to do the dllimport stuff.[/QUOTE] Into C#? [URL=http://msdn.microsoft.com/en-us/library/aa664436%28v=vs.71%29.aspx]Documentation[/URL] is vague, but the syntax is right. I used this below in one of my projects. [CODE][DllImport("kernel32.dll", EntryPoint = "GetConsoleWindow")] private static extern IntPtr _GetConsoleWindow();[/CODE] So it is with the [I]extern[/I] keyword and the [I]DllImport[/I] attribute to specify where and what you are loading. Although it requires a proper documentation on the external side, i.e: to know which function you need to import.
[QUOTE=whisperity;42903716]Into C#? [URL=http://msdn.microsoft.com/en-us/library/aa664436%28v=vs.71%29.aspx]Documentation[/URL] is vague, but the syntax is right. I used this below in one of my projects. [CODE][DllImport("kernel32.dll", EntryPoint = "GetConsoleWindow")] private static extern IntPtr _GetConsoleWindow();[/CODE] So it is with the [I]extern[/I] keyword and the [I]DllImport[/I] attribute to specify where and what you are loading. Although it requires a proper documentation on the external side, i.e: to know which function you need to import.[/QUOTE] Into C++, but it can't be that much different than C#. Thanks for the link. Although I always thought you could do it through linking the .dll and including the headers (although I don't know what the headers are)
I'm making a simple game for my Computer Graphics class and I need some help. I'm using lwjgl and JBullet. [video=youtube;WTjrn5yZpo4]http://www.youtube.com/watch?v=WTjrn5yZpo4&feature=youtu.be[/video] Does anyone have any idea why that up-and-down stuttering and clipping through the ground is happening? The "vehicle" is a RaycastVehicle and the ground is just a RigidBody with a StaticPlaneShape collision shape. Are there any good JBullet (i guess i could survive with c++ bullet) tutorial you guys recommend?
[QUOTE=Adult;42903939]Into C++, but it can't be that much different than C#. Thanks for the link. Although I always thought you could do it through linking the .dll and including the headers (although I don't know what the headers are)[/QUOTE] In C++ you are right. Although if I recall correctly, you don't directly link against the .dll in Windows, but you get a .lib shim. I could be wrong though, and you can directly link against the .dll. It seems you need to [url=http://www.steampowered.com/steamworks/gettingstarted.php]contact Valve[/url], although there is also a reverse engineering project: [url=https://github.com/SteamRE/open-steamworks]Open Steamworks[/url].
[QUOTE=ZeekyHBomb;42904577]In C++ you are right. Although if I recall correctly, you don't directly link against the .dll in Windows, but you get a .lib shim. I could be wrong though, and you can directly link against the .dll. It seems you need to [url=http://www.steampowered.com/steamworks/gettingstarted.php]contact Valve[/url], although there is also a reverse engineering project: [url=https://github.com/SteamRE/open-steamworks]Open Steamworks[/url].[/QUOTE] asdf, too much confusion. sorry my fault, i'm talking about FonixTalk, not Steamworks. I already have steamworks working :P I'm trying to redo [url=http://facepunch.com/showthread.php?t=1216809]SteamTTS[/url], but this time with steamworks instead of open steamworks, my issue is i don't know how to get FonixTalk working. (sorry for the mixup) [b]Edit:[/b] ohgod page king, i'm sorry
[QUOTE=zero_slo;42904290]I'm making a simple game for my Computer Graphics class and I need some help. I'm using lwjgl and JBullet. [video=youtube;WTjrn5yZpo4]http://www.youtube.com/watch?v=WTjrn5yZpo4&feature=youtu.be[/video] Does anyone have any idea why that up-and-down stuttering and clipping through the ground is happening? The "vehicle" is a RaycastVehicle and the ground is just a RigidBody with a StaticPlaneShape collision shape. Are there any good JBullet (i guess i could survive with c++ bullet) tutorial you guys recommend?[/QUOTE] Could be an issue with your timestep. You can find C/C++ (not sure) demos in the official Bullet repo. They're probably a good source. Bullet also hosts a wiki with some instructions, though from what I remember they's not too much on there, the description is fairly sparse and sometimes slightly out-dated.
[QUOTE=ZeekyHBomb;42904628]Could be an issue with your timestep.[/QUOTE] Do you mean [CODE]dynamicsWorld.stepSimulation( deltaTimeSeconds );[/CODE] I doubt that's the problem, the wheel glitch out even if i set the delta time to 1.0/1000 and everything is in slowmotion :v:. Could it be a problem with with the vehicle's raycasting? Since the rays are infinitely thin and so forth...? [editline]18th November 2013[/editline] Well, whadoyaknow, I changed the ground collision shape from a StaticPlaneShape to a thin BoxCollisionShape and it works now. Would still like some explanation why this works though...
I'm interesting in designing my own compiled language (for fun). I know the basics about how a compiled language works but I have no idea how to practically go about creating one. Is LLVM a good tool to use for this? The impression I get is that I would need to write a compiler that creates LLVM IR from my source files, and LLVM can take care of the rest. Is that correct?
That is one option. You can also use libLLVM help build to AST and generate the IR. There's a [url=http://llvm.org/docs/tutorial/]tutorial[/url] for that to get you started. You could also target the JVM or CLR. And some languages compile to C (or, depending on the target audience, PHP or JavaScript are also somewhat popular), to get compiled by GCC or whatever. [editline]18th November 2013[/editline] libLLVM only helps you with generating IR. Although the tutorial covers how to parse and lex source code to build and AST, it is independent of any LLVM dependencies.
Okay, so another question. How would I go about finely controlling thread speeds in Java? Thread.sleep() has a method with milliseconds and nanoseconds, but it seems that the finest control it can get to in Windows 7 is 1ms, which is slower than what I want. I have a thread class whose run() method involves doing a simple computation in a "while (true) {" loop, EG it continues until I kill the thread. I want to be able to control, with very fine granularity, how quickly this thread executes. For purposes of testing, I have a "numCalls" counter that increments every time this thread object runs its computation, and a "getNumCalls()" method that returns the value of numCalls before setting it back to zero. I then have another thread on a 1-second timer that polls and prints how many operations the thread does. Here is some debug with "sleep(0,1)", or sleep 1 nanosecond, on the thread: [code]Stats (0.0000 seconds): Thread executed 1010 operations since last poll. Stats (1.0000 seconds): Thread executed 1010 operations since last poll. Stats (2.0000 seconds): Thread executed 1007 operations since last poll. Stats (3.0000 seconds): Thread executed 1007 operations since last poll. Stats (4.0000 seconds): Thread executed 1010 operations since last poll. Stats (5.0000 seconds):[/code] As you can see, it's roughly calling once per millisecond, rather than nanosecond. This computation is so simple it doesn't even show up as a blip in my CPU Usage History. If I remove the "sleep" command: [code]Stats (0.0000 seconds): Thread executed 15539247 operations since last poll. Stats (1.0000 seconds): Thread executed 20014762 operations since last poll. Stats (2.0000 seconds): Thread executed 19930962 operations since last poll. Stats (3.0000 seconds): Thread executed 19946440 operations since last poll. Stats (4.0000 seconds): Thread executed 19846984 operations since last poll. Stats (5.0000 seconds):[/code] It runs a far higher amount of operations, and, as can be expected from an unsleeping / unwaiting "while (true) { ... }" loop, drives the core it runs on up to about 100%. What I want is the ability to control how much CPU usage this thread takes by controlling its speed. 1000 calls and 0% is far lower than what I want, but 20,000,000 calls and 100% usage is far higher than what I want. I want, say, maybe 15% (at a calculated 3,000,000 calls) of CPU usage. How would I do this with threads in Java?
I can't find any free and easy TTS libraries for C++. Anyone know of one?
Im playing with Noisepp in order to get some smooth terrain generation and have this wrapper: [cpp] #ifndef NOISEPP_NOISE_HPP #define NOISEPP_NOISE_HPP #include <noisepp/core/Noise.h> class NoiseppNoise { protected: noisepp::PerlinModule mPerlin; noisepp::ThreadedPipeline1D mPipeline1d; noisepp::ThreadedPipeline2D mPipeline2d; noisepp::ThreadedPipeline3D mPipeline3d; noisepp::ElementID mNoiseID1D; noisepp::ElementID mNoiseID2D; noisepp::ElementID mNoiseID3D; noisepp::Cache *mCache1d; noisepp::Cache *mCache2d; noisepp::Cache *mCache3d; int mThreadCount; double mDistortion; public: NoiseppNoise( ); ~NoiseppNoise(); void Init(); void SetSeed( int seed ); void SetOctaveCount( int oct ); void SetPersistence( double pers ); void SetFrequency( double freq ); void SetQuality( int qual ); void SetScale( double scale ); void SetLacunarity( double lacun ); void SetDistortion( double distortion ); void ParseArguments( int argc, const char *argv[] ); double Generate( double x ); double Generate( double x, double y ); double Generate( double x, double y, double z ); }; extern NoiseppNoise NoisePP; #endif[/cpp] [cpp] #include "NoiseppNoise.hpp" #include <iostream> #include <noisepp/utils/NoiseUtils.h> #include "../Utilities.hpp" NoiseppNoise NoisePP; // // Defaults are // Frequency = 1 // Octaves = 6 // Seed = 0 // Quality = 1 // Lacunarity = 2 // Persistence = 0.5 // Scale = 2.12 // NoiseppNoise::NoiseppNoise( ) : mPipeline1d( 2 ), mPipeline2d( 2 ), mPipeline3d( 2 ) { mDistortion = 1.0; } void NoiseppNoise::Init() { mThreadCount = noisepp::utils::System::getNumberOfCPUs (); if ( mThreadCount > 2 ) { mPipeline1d = noisepp::ThreadedPipeline1D( mThreadCount ); mPipeline2d = noisepp::ThreadedPipeline2D( mThreadCount ); mPipeline3d = noisepp::ThreadedPipeline3D( mThreadCount ); } mNoiseID1D = mPerlin.addToPipe ( mPipeline1d ); mNoiseID2D = mPerlin.addToPipe ( mPipeline2d ); mNoiseID3D = mPerlin.addToPipe ( mPipeline3d ); mCache1d = mPipeline1d.createCache(); mCache2d = mPipeline2d.createCache(); mCache3d = mPipeline3d.createCache(); } NoiseppNoise::~NoiseppNoise() { mPipeline1d.freeCache( mCache1d ); mPipeline2d.freeCache( mCache2d ); mPipeline3d.freeCache( mCache3d ); mCache1d = NULL; mCache2d = NULL; mCache3d = NULL; } void NoiseppNoise::ParseArguments( int argc, const char *argv[] ) { for( int i = 1; i < argc; i++ ) { if( argv[i] == "-seed" && argc > i+1 ) { SetSeed( Util::StrTo<int>( argv[i+1] ) ); } else if( argv[i] == "-persistance" && argc > i+1 ) { SetPersistence( Util::StrTo<double>( argv[i+1] ) ); } else if( argv[i] == "-octave" && argc > i+1 ) { SetOctaveCount( Util::StrTo<int>( argv[i+1] ) ); } else if( argv[i] == "-frequency" && argc > i+1 ) { SetFrequency( Util::StrTo<double>( argv[i+1] ) ); } else if( argv[i] == "-quality" && argc > i+1 ) { SetQuality( Util::StrTo<int>( argv[i+1] ) ); } else if( argv[i] == "-scale" && argc > i+1 ) { SetScale( Util::StrTo<double>( argv[i+1] ) ); } else if( argv[i] == "-lacunarity" && argc > i+1 ) { SetLacunarity( Util::StrTo<double>( argv[i+1] ) ); } else if( argv[i] == "-distortion" && argc > i+1 ) { SetDistortion( Util::StrTo<double>( argv[i+1] ) ); } } } void NoiseppNoise::SetOctaveCount( int oct ) { mPerlin.setOctaveCount( oct ); } void NoiseppNoise::SetPersistence( double pers ) { mPerlin.setPersistence( pers ); } void NoiseppNoise::SetFrequency( double freq ) { mPerlin.setFrequency( freq ); } void NoiseppNoise::SetQuality( int qual ) { mPerlin.setQuality( qual ); } void NoiseppNoise::SetScale( double scale ) { mPerlin.setScale( scale ); } void NoiseppNoise::SetLacunarity( double lacun ) { mPerlin.setLacunarity( lacun ); } void NoiseppNoise::SetDistortion( double distortion ) { mDistortion = distortion; } void NoiseppNoise::SetSeed( int seed ) { mPerlin.setSeed( seed ); mPipeline1d.setSeed( seed ); mPipeline2d.setSeed( seed ); mPipeline3d.setSeed( seed ); } double NoiseppNoise::Generate( double x ) { mPipeline1d.cleanCache( mCache1d ); return mPipeline1d.getElement( mNoiseID1D )->getValue ( x * mDistortion, mCache1d ); } double NoiseppNoise::Generate( double x, double y ) { mPipeline2d.cleanCache( mCache2d ); return mPipeline2d.getElement( mNoiseID2D )->getValue ( x * mDistortion, y * mDistortion, mCache2d ); } double NoiseppNoise::Generate( double x, double y, double z ) { mPipeline3d.cleanCache( mCache3d ); return mPipeline3d.getElement( mNoiseID3D )->getValue ( x * mDistortion, y * mDistortion, z * mDistortion, mCache3d ); } [/cpp] And I use it as: [cpp] #include <iostream> #include <iomanip> #include <algorithm> #include <string> #include <vector> #include <sstream> #include "SOIL.h" #include "framework/Noise/NoiseppNoise.hpp" #include "framework/Utilities.hpp" double distortion = 0.01; std::string file = "new_terrain.bmp"; using namespace std; int main( int argc, const char *argv[] ) { if( argc < 10 ) { std::cout << "Not enought arguments"<< std::endl; std::cin.get(); return 1; } std::vector<std::string> params( argv+1, argv+argc ); if( Util::StrTo<int>( params[0] ) != 0 ) { NoisePP.SetSeed( Util::StrTo<int>( params[0] ) ); } if( Util::StrTo<int>( params[1] ) != 0 ) { NoisePP.SetOctaveCount( Util::StrTo<int>( params[1] ) ); } if( Util::StrTo<double>( params[2] ) != 0.0 ) { NoisePP.SetPersistence( Util::StrTo<double>( params[2] ) ); } if( Util::StrTo<double>( params[3] ) != 0.0 ) { NoisePP.SetFrequency( Util::StrTo<double>( params[3] ) ); } if( Util::StrTo<int>( params[4] ) != 0 ) { NoisePP.SetQuality( Util::StrTo<int>( params[4] ) ); } if( Util::StrTo<double>( params[5] ) != 0.0 ) { NoisePP.SetScale( Util::StrTo<double>( params[5] ) ); } if( Util::StrTo<double>( params[6] ) != 0.0 ) { NoisePP.SetLacunarity( Util::StrTo<double>( params[6] ) ); } if( Util::StrTo<double>( params[7] ) != 0.0 ) { distortion = Util::StrTo<double>( params[7] ); } if( params[8] != " " || params[8] != "" ) { file = params[8]; } NoisePP.Init(); // Frequency = 1 // Octaves = 6 // Seed = 0 // Quality = 1 // Lacunarity = 2 // Persistence = 0.5 // Scale = 2.12 const int mWidth = 512; const int mHeight = 512; unsigned char *image = new unsigned char[mHeight * mWidth]; for( int j = 0; j < mHeight; j++ ) { for( int i = 0; i < mWidth; i++ ) { image[i + j * mWidth] = NoisePP.Generate( i*distortion, j*distortion ); } } SOIL_save_image ( file.c_str(), SOIL_SAVE_TYPE_BMP, mWidth, mHeight, 1, image ); delete[] image; return 0; } [/cpp] But no matter what values I use it doesnt seem to smooth down, here are a couple of images created: [QUOTE][IMG]http://i.imgur.com/2IEFmQ4.png[/IMG][IMG]http://i.imgur.com/ChyXDu9.png[/IMG][IMG]http://i.imgur.com/o6wWuYE.png[/IMG][IMG]http://i.imgur.com/8j859n3.png[/IMG][/QUOTE] The only thing that really changes the smoothness is changing the distortion to be really small. I dont really understand Noisepp's way of chaining modules can anyone please help?
Some Simplex-noise thingy I wrote uses steps of 0.02 for a smooth image, so really small, for some definition of "really small", might be just right. No idea about Noisepp though. [QUOTE=Adult;42907306]I can't find any free and easy TTS libraries for C++. Anyone know of one?[/QUOTE] Have you checked out the stuff found in this [url=http://stackoverflow.com/questions/637616/open-source-text-to-speech-library]SO question[/url]? [editline]19th November 2013[/editline] [QUOTE=Gmod4ever;42907249]How would I do this with threads in Java?[/QUOTE] You can try just using [url=http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#yield()]Thread.yield()[/url]. If that is still too much CPU usage, or you simply still want more control, try the [url=http://stackoverflow.com/questions/824110/accurate-sleep-for-java-on-windows/2986919#2986919]"spin-yield"[/url].
[QUOTE=ZeekyHBomb;42908142] Have you checked out the stuff found in this [url=http://stackoverflow.com/questions/637616/open-source-text-to-speech-library]SO question[/url]? [/QUOTE] I can't get Festival or Flite to compile successfully, so I guess those are out of the question :L
So i made a method called "welcome" (public static void welcome()) that is essentially just a bunch of printlns. How do i use that method in the Main method? Wouldnt it just be System.out.print(welcome)???
You just call welcome();. You'd only do System.out.print(welcome()); if it was returning a String.
Hey everyone, So, i was wondering if you all could lend me some help. We have a program assignment to take something called "patient.dat" and extract something like "Doe, John 140/74" and extract the first and last name, then the systolic and diastolic numbers and determine if a patient has high blood pressure. So far i have this: [code] //Aaron White //Project III //Create a project to identify Blood Pressure levels #include "stdafx.h" #include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std; void Pause () {//freezes screen char junk; cout <<endl << endl << "Press some keys followed by the Enter key to continue..."; cin.ignore(); cin.get(junk); //end pause } int main() { //MAIN BODY //open files needed ifstream patientInfo; patientInfo.open( "C:\\patient.dat"); //identify/declare variables string firstName; string lastName; int sysPressure; int disPressure; //test-info: White, Aaron 110/73 getline(patientInfo, inputLine); //lastName = inputLine.substr(0,5); //firstName = inputLine.substr(8,5); //input from keyboard <--None needed. //calculate /* Need If/Else statement (maybe if when) to determine if the systolic and diastolic numbers are above what they need to be. */ //display results cout << lastName << ", " << firstName << endl; patientInfo.close(); Pause(); return(0); } [/code] Anyhow, what's throwing me for a loop is the getline function. On my previous assignment, the getline part worked just fine, but, now it's giving me an error that says "no instance of overloaded function “getline” matches argument list". I'm not sure if maybe I've just screwed something up, or what. I know it's possible that maybe I've mixed something up. Anyhow, what do you guys think?
Sorry, you need to Log In to post a reply to this thread.