I am attempting to create a mix of rpg and mystery AGS game, though I'm not great at scripting.
At the moment I am trying to create a character selection screen using GUI's, so far I have created all the visual aspects, but now I need to link the image GUI's to the next GUI screen and from there the final image GUI to the selected character.
function Male_Button_OnClick(GUIControl *control, MouseButton button)
{
}
The other GUI is called GUI:Male_class
So it goes kinda like:
Gender: Male/Female}
Class: One of 3 Classes} from then on playing the game with the selected character class.
From what I have gathered from other posts I can use a fade in/out option to bring up the first GUI, and there is a script "SetPlayerCharacter (CHARID)" that maybe used to select the character. only problem is bringing it all together and the linking of the GUI's before starting the game with a specific character.
I think that is everything
Something like this should work:
Gender GUI has two buttons (male ID: 0, female ID: 1), both have their function set to gender_OnClick:
int gender; // 0: male 1: female
function gender_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
gender = control.AsButton.ID;
if (gender) { // female?
bClass1.NormalGraphic = SLOT1;
bClass2.NormalGraphic = SLOT2;
bClass3.NormalGraphic = SLOT3;
}
gGender.Visible = false;
gClass.Visible = true;
}
Step by step:
-set int variable "gender" to ID of the button
-if female was selected, change button images on class selection GUI to female images (buttons start out with male images)
-turn off gender GUI, turn on class GUI
Similarly for the class GUI:
int class; // 0: Warrior 1: Thief 2: Sorcerer
function class_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
class = control.AsButton.ID;
gRace.Visible = false;
// set player character
}
You can use two methods to reflect the selected gender or class:
Either use player.ChangeView(...) to permanently change the player characters view
or use .SetAsPlayer(...) to change the player character to one of the six previously created.
You can e.g. use characters 0-5 with 0 being male warrior, 1 being male thief, etc. and 5 being the sorceress.
Then call character[gender*3+race].SetAsPlayer();
Edit: renamed 2nd OnClick to "class_OnClick" instead of "race_OnClick".
Thanks for that, I tried out using the second code there, seemed the most simple to understand. well here are the initial results just for selecting a gender
int Gender_select; // 0: Male_Button 1: Female_Button
function Male_Button_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
gender = control.AsButton.ID;
Gender_select.Visible = false
Male_class.Visible = true;
// set player character
}
function Female_Button_OnClick(GUIControl *control, MouseButton button)
{
if (button != eMouseLeft) return; // allow only left-clicks
class = control.AsButton.ID;
Gender_select.Visible = false
Female_class.Visible = true;
// set player character
}
I have probably changed something badly, i keep getting the error "Size of identifier does not match prototype" for the int Gender_select; // 0: Male_Button 1: Female_Button
I forgot these details last time.
The first GUI to access (gender selection) is called "Gender_select", that one contains two buttons "ID:0 Male_Button" "ID:1 Female_Button"
The other two GUI's are "Male_class" and "Female_class" and each contain similary named buttons "ID:0 Beast" "ID:1 Warrior" "ID:2 Thief"
The ID's are the same for both GUI's
See, that's exactly what I wanted to avoid: You have two GUIs for the class selection (just one is needed) and lots of duplicate code.
If you set up one class selection GUI with the three male images on the class buttons, all you need to do after the player selected female is to change the three buttons' images to female ones before displaying the GUI. (That's what I've done in the first piece of code, Button.NormalGraphic is set to another sprite slot to change the image. Just replace SLOT1/2/3 with the number of the female class sprite slots.)
Also, you seem to have misunderstood me: the two pieces of code take care of the gender and class selection respectively, they aren't meant for male and female buttons.
You can assign one OnClick function to multiple buttons, that's why there's the *control parameter: to determine which control was clicked.
So put "gender_OnClick" in both the male button's and the female button's OnClick textfield.
Then put "class_OnClick" in all three class buttons' OnClick.
The error occurs because you are trying to declare an int with the same name as an existing GUI pointer ("Gender_select"). Since you've named the GUI "Gender_select", AGS automatically sets that up as global variable of type GUI* to make the GUI accessible in script.
ok, right I sorted out the OnClick so i got the right one to each button.
Now looking at what you said about changing the SLOT 1/2/3, when you say sprite slots what do you mean? is it the number of sprites used from the sprite tab, or one of the other tabs, character, view. ???
Also another error has been thrown up "Undefined token 'bClass1'", i'll take a guess that I need to define bClass in relation to the sprite slots. though not sure about that
Exactly, just put in the numbers from the sprite manager.
You'll have to replace "bClass1/2/3" with the names of the three class buttons on the class selection GUI.
Those lines simply change the images on the buttons.
(I'm still assuming that you're using three male/female pictures you've put on buttons to let the player select a class.)
Right that bit worked well now got
int gender; // 0: male 1: female
function gender_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
gender = control.AsButton.ID;
if (gender) { // female?
FBbutton.NormalGraphic = 57;
FWbutton.NormalGraphic = 8;
FTbutton.NormalGraphic = 69;
}
gGender.Visible = false;
gClass.Visible = true;
}
got yet another error, this one is "Undefined token 'gGender' "
i assume this means that I need to change the name to mean th GUI name that I want to make not visible. If that is right, may get the same error for the "gClass.Visible"
Exactly, just replace gGender and gClass with the names of your GUIs.
ok, i got it working so it appears properly, but at the moment it seems that the gender select option doesn't appear first, only the female classes appear now. Gonna try and sort out what you suggested so I'm only using one GUI for the classes, though i think i need to delete the old class GUI's first then create a new GUI for both gender classes.
If you code explain the simple way of going about this that would be good, i think that it would be implemented by setting it up with male of female classes first then having it change depending on which class was selected, but i have no clue how to achieve that
The final code I have now with the 2 class GUI's are
int gender; // 0: male 1: female
function gender_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
gender = control.AsButton.ID;
if (gender) { // female?
FBbutton.NormalGraphic = 57;
FWbutton.NormalGraphic = 8;
FTbutton.NormalGraphic = 69;
}
Gender_select.Visible = false;
Female_class.Visible = true;
}
int class; // 0: Warrior 1: Thief 2: Sorcerer
function class_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
class = control.AsButton.ID;
Female_class.Visible = false;
// set player character
}
So i need to reduce it down to one class GUI, then set the player character without a character appearing before it has been selected
Ok, thanks for your help so far, there are still just a few minor things to iron out
the code stands now as
int gender; // 0: male 1: female
function gender_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
gender = control.AsButton.ID;
if (gender) { // female?
BST.NormalGraphic = 57;
WAR.NormalGraphic = 8;
THF.NormalGraphic = 69;
}
Gender_select.Visible = false;
gClass.Visible = true;
}
int class; // 0: Warrior 1: Thief 2: Sorcerer
function class_OnClick(GUIControl *control, MouseButton button) {
if (button != eMouseLeft) return; // allow only left-clicks
class = control.AsButton.ID;
gClass.Visible = false;
// set player character
}
this is with only 2 GUI's, one for gender, one for class.
the game runs but appears to start with the male class select GUI open, although the seperate GUI is no longer there, after that one is clicked on the GUI switches to the gender select GUI and continues correctly from there, i just need to now remove the class select GUI that appears first and remove the characters that appear onscreen before the character is selected.
Quote from: ShadowRifter666 on Sun 01/02/2009 21:32:06
i just need to now remove the class select GUI that appears first and remove the characters that appear onscreen before the character is selected.
In the GUI's panel you can change the appearance and e.g. select "normal, initially off". As for the character: Just set character.Visible to false in the beginning and to true when a class or the gender is selected.
ok so the GUI no longer appears,
you say put the character.Visible = false
at the beginning, where would be the beginning, and would the code apply to all 6 characters, and what is the code to select one character to appear and become the main character
Quote from: ShadowRifter666 on Mon 02/02/2009 03:13:32
you say put the character.Visible = false
at the beginning, where would be the beginning
Just put it in the room's beforefadein-section.
Quote from: ShadowRifter666 on Mon 02/02/2009 03:13:32
[...] and would the code apply to all 6 characters, and what is the code to select one character to appear and become the main character
Well, the command is for one character only but you can just write it for all 6 characters. The code for one character to appear is the exact same, just set it to "true" instead of "false"...
To make a character the player character use character.SetAsPlayer();
EDIT:
You don't have to make 6 characters. Just use ONE player character and change its look assigning one of six views to it using Character.ChangeView(view).
ok so if i was to change the character view instead of having seperate characters would i be able to assign different actions to each view, rather than have them assign to seperate characters?
You can either directly check for the player character's view:
if (player.NormalView == 1) {
...
}
else if (player.NormalView == 2) {
...
or reuse the existing variables holding the gender and race.
Of course you'd have to make them global variables in order to access them from room scripts.
Just remove the declarations from the global script and add them back via the Global Variables pane.
lots of help so far, you covered things that I haven't even thought about yet.
just to go over the old, to change the character view, between 1 of 6 through the starting GUI gender_select, then gClass. how do I link that to the Character.ChangeView()
at the moment I have it as Character.ChangeView(class)
but keep getting the error "Must have an instance of the struct to access a non-static member"
You still have the selected gender and class stored in the variables of the same names.
To transform their values into 1-6, you can use
gender*3 + class + 1:
class
| beast | warrior | thief
gen. | (0) | (1) | (2)
-----------------------------------
male (0) | 1 | 2 | 3
-----------------------------------
fem. (1) | 4 | 5 | 6
Character.ChangeView(int view) can't be called, you have to call the ChangeView() function of the actual instance (of type Character), in this case: player
player.ChangeView(gender*3+class+1);
Ok I can implement that alright, just hit a minor snag, the views were arranged in the wrong order, i couldn't change the ID tags on them, so i deleted them but now I keep getting moved straight onto View 4 when creating new Views, though I have created View 1 but not View 2 or 3.
Any ideas?
actually ignore that, just figured it out
OK the character selection at the start works perfectly
just experimenting with the if (player.NormalView ==
and found that the display text I am attempting doesn't work properly.
I am using the default code left my the cEgo character to try and change what happens when the character looks at themselves
function cChar1_Look()
{
if (player.NormalView == 1, 2, 3)(
Display("Damn, I'm a good looking Guy!"));
else if (player.NormalView == 4, 5, 6)(
Display("Damn, I'm a good looking Girl"))
}
as you can see i am trying to use it so that the Display affects each gender, no matter which character, by trying to make it affect only the view
It doesn't work that way, you'll have to use the OR operator "||" (http://www.adventuregamestudio.co.uk/manual/Operators.htm).
function cChar1_Look()
{
if (player.NormalView == 1 || player.NormalView == 2 || player.NormalView == 3)
Display("Damn, I'm a good looking Guy!");
else
Display("Damn, I'm a good looking Girl");
}
A few pointers: ( and ) are used for function parameters, { and } are used to group together several commands (after if, else if, else or those of a function).
You're calling a single (Display) line here, so you don't need the curly brackets, see my code above.
Also, since the view can't have a value other than 1-6, you can do:
function cChar1_Look()
{
if (player.NormalView < 4) Display("Damn, I'm a good looking Guy!");
else Display("Damn, I'm a good looking Girl");
}
You can also use the gender variable.
Also note that Display will show a text box. If you want the player character to say the sentence, use player.Say("Damn, ...");
Right, that build correctly, select gender and class just fine now,
that code will definately help with bits and pieces to come.
just now need to get text to be appear
changed the display to player.say but for some reason be it Display or Player.Say the text doesn't appear onscreen, i think I maybe missing the code to recognise the character as something that can be interacted with, none of the other default functions from cEgo work, even though the code has been replaced correctly from cEgo to cChar1
If you open cChar1 and go to the events pane, what does it say e.g. next to "Look at character"?
Also check if the character's Clickable property is set to true.
And in the global script's on_mouse_click, in the eMouseLeft block, does it say "ProcessClick(...)"?
It all that is fine, make sure that the character you're clicking on is actually the player character.
thanks, i just needed to input the functions into the "Look at character" section, forgot it wasn't applied with other characters apart from cEgo
Just experimenting with the
if (player.NormalView < 4) player.Say()
and i am trying to add in a few variables to the speech
basically, tryingto have speech from 2 different characters played then a third dialog only if the character is a set view
in this case I need an "else if" function or something
if (player.NormalView < 4) player.Say("123");
else
{player.Say("456")};
ELSE (player.NormalView == 21 || player.NormalView == 57) player.Say("789");
maybe a function that works like also would, so that it goes, player if player is view < 4 then player.say ("123");
it misses out the first "else" for other views, then uses an type of also function (ELSE) if the character is one of the correct views to say ("789"), if the view isn't right then the dialog ends after first if or else
for example there are 1,2,3,4,5,6 views so
if (player.NormalView < 4) player.Say("123");
else (player.Say("456"));
ALSO if (player.NormalView == 2 || player.NormalView == 5) player.Say ("789");
may of over explained that, hope it makes sense
if (player.NormalView < 4) player.Say("123");
else if (player.NormalView == 2 || player.NormalView == 5) player.Say ("789");
else player.Say("456");
that doesn't quite work, i need to be able to say 123 + 789 or 456 +789 if the views are correct, or just 123/456 if the views are wrong. at the moment it just shows 123 +456 but not 789
if (player.NormalView == 2 || player.NormalView == 5) {
if (player.NormalView < 4) player.Say("123");
else player.Say("456");
player.Say("789");
}
else {
player.Say("123");
player.Say("456");
}
Like that?
I can see what it is supposed to do but it doesn't work
I changed the code a little to try and make more sense of it and it seemed to be more suitable
if (player.NormalView == 2 || player.NormalView == 5) {
if (player.NormalView < 4) player.Say("123");
else player.Say("456");
player.Say("789");
}
else {
if (player.NormalView < 4) player.Say("123");
else player.Say("456");
}
can't quite work out how to get this working
something like
if (player.NormalView < 4) player.Say("123");
else player.Say("456");
then need and AND function in here so that
if (player.NormalView == 2 || player.NormalView == 5)player.Say("789");
if you get where i am going with this
What's wrong with:
if (player.NormalView < 4) player.Say("123");
else player.Say("456");
if (player.NormalView == 2 || player.NormalView == 5) player.Say("789");
?
Edit: Ah, I guess this should solve it:
String s;
if (player.NormalView < 4) s = "123";
else s = "456";
if (player.NormalView == 2 || player.NormalView == 5) s = s.Append("789");
player.Say(s);
Here's code with example text:
String g;
if (player.NormalView < 4) g = "guy, and now I'll";
else s = "girl, but I'll still";
String wr = "";
if (player.NormalView == 2 || player.NormalView == 5) wr = ", warrior-style";
player.Say(String.Format("I'm a %s bash your head in%s!", g, wr);
ok that is cool, i think that should work, though I keep getting the error
Failed to save room room7.crm; details below
room7.asc(-10): Runtime error: unexpected eof
And just to make it more complicated than anything needs to be, I am trying to put in some "Display" text as well, though I know that wouldn't fall into defining the "string s" in that case would i need to define another string for the Display text so something like
string D;
if(player.NormalView > 3) D = "abc";
else D = " "
at that point i am lost trying to get into the player.Say section since it is a Display function rather than player.Say.
In simple terms i guess it would go something like
if (NormalView <4) player.Say "123"
else
{
player.Say ("456")
Display("789")
player.Say ("abc")
}
one other thing, is it possible to play a single room rather than go through every room each time i want to check everything is working?
Yes: if 'Enable Debug Mode' in General Settings is set to True, then you can use the keycode Ctrl-X while testing your game to open a dialog box that will allow you to instantly warp to a chosen room.
ok thaanks for that, any ideas on everything else?
also i maybe missing seeing it in the manual but how to you define one property of an object
say I just want to say an object is solid
oRock1.Solid = true;
[/code
i need something before that, since it keeps throwing an error at me when i just want that to be a constant in that room
The eof error usually means you didn't terminate a string. Look through your script for a missing ".
You don't have to declare another String variabe to use the display command.
Just replace "player.Say" with "Display".
About your latest post:
You can only declare variables directy in the room script, all other commands have to be inside a function. You'll probably want the room's before fadein event, select the room, open the events pane (bolt icon), select before fadein and click the ellipses button. The function is created in the room script, put the line in there.
ok well i can't find a missing " heres there code i have so far
function oObject0_Look()
{
player.Say("Now that is a big stasis tube");
Display("Yup, there is the creature inside");
String s;
if (player.NormalView < 4) s = "The creatures looks like it is sounds asleep";
else s = "Strange looking creature";
Display ("Looks nearly human");
player.Say ("Wonder if the named it yet?");
String bs;
if (player.NormalView == 21 || player.NormalView == 57) bs = "Though something about that creature seems rather familiar";
player.Say(String.Format(s, bs);
}
ok thanks for the before fade-in, i thought i might need to be in there but i got the wrong function
If you want to stich two strings together, use String.Format("%s%s", a, b).
The first parameter has to be a string constant, i.e. text with "" around it.
Look up String.Format and the linked string formatting section in the help file.
In your code, you can also do:
s = s.Append(bs); // stich bs to the end of s
player.Say(s);
// say s
ok that String.Format helped, though now I have another grevience, as shown in the code i put up in my last post I have 3 speeches, going player1--display--player2, but when i run the game it comes out Display--player1--player2 so i need to solve that.
Also the second IF statement defining bs isn't being seen. i think it maybe a problem with ordering the script wrongly but i'm not sure.
The eof was solved, a missing ) rather than "
and finally the code to make an object solid
oRock1.Solid = true;
doesn't work, I have it placed right at the start of the room script in the
function room_Load()
{
oRock1.Solid = true;
}
but the player walks straight through it
Suggestions for your object.Solid problem:
-Check if function is linked, of course.
-See if you you are using any functions that will ignore walkable areas, such as the eAnywhere parameter of Walk.
-As a workaround, try putting a different walkable area around the rock object, and disable that.
~Trent
I think characters aren't solid by default, so you'll have to add player.Solid = true;
well i set the player.Solid = true; anyway but i hadn't set the blocking height or width so that was allowing the player to pass through the object, I should of seen that first.
Hope someone has and idea on the different speech code I'm trying to do, 5 posts back on 25th Feb
I have a similar problem now though a little easier, i am trying to get 3 different speeches to appear depending on the character NormalView
function oRock1_Look()
{
Display ("That big damn boulder is blocking the path");
if (player.NormalView == 11 || player.NormalView == 35) player.Say("wonder if i could push it out the way?");
if (player.NormalView == 45 || player.NormalView == 69) player.Say("wonder if I could Climb over it?");
if (player.NormalView == 57 || player.NormalView == 21) player.Say("I think I could probably smash that rock into pieces");
}
I probably need an else in there but that would stop it reaching the last if i think
You don't need an else, the three conditions are exclusive of eachother.
Do you want to display the whole sentence at once?
function oRock1_Look()
{
String s = "That big damn boulder is blocking the path";
if (player.NormalView == 11 || player.NormalView == 35) player.Say(s.Append(", wonder if i could push it out the way?"));
if (player.NormalView == 45 || player.NormalView == 69) player.Say(s.Append(", wonder if I could climb over it?"));
if (player.NormalView == 57 || player.NormalView == 21) player.Say(s.Append(". I think I could probably smash that rock into pieces."));
}
ok, well i need to have the first speech as a Display dialog so could i code it as
function oRock1_Look()
{
Display ("That big damn boulder is blocking the path")
String s = "";
if (player.NormalView == 11 || player.NormalView == 35) player.Say(s.Append(", wonder if i could push it out the way?"));
if (player.NormalView == 45 || player.NormalView == 69) player.Say(s.Append(", wonder if I could climb over it?"));
if (player.NormalView == 57 || player.NormalView == 21) player.Say(s.Append(". I think I could probably smash that rock into pieces."));
}
What's wrong then with your original code? What doesn't work? It looks just fine for what you want.
You have a total possibility of 6 characters right? 3 classes and two genders. Why not use a global variable (or 4) to check which the player has chosen? I'd find that easier and cleaner to code and read, rather than a ton of NormalView checks.
You could probably use extender functions and enums creatively, and make a player.Class which you can easily check.
BTW, I'm just speaking generically about your game and code here, not your specific problems. Also, I haven't read through the beginning of the thread recently either..
~Trent
To KhrisMUC the code looks alright, but when trying to use it it only shows the Display text onscreen, the player.Say text doesn't appear, I have added on player.Say(s) at the end of the code just to be sure it does appear but still nothing
To Trent R, I haven't got a clue how to use global variables, and the way that I am learning at the moment everything seems to be working out alright using the player.NormalView apart from recent areas shown in previous posts
In the Global variables pane, create two vars, type int, name gender/class, initial value 0, done.
You'd have to remove the declaration lines from the global script then, of course (e.g. "int class;").
Then you could add an enum def in the global header:
enum Class { // note the capital C in Class! class isn't available anymore, it's the var used to store the class
eClassBeast = 1,
eClassWarrior = 2,
eClassThief = 3
};
In the code, you can now use
if (class == eClassBeast) player.Say("blah");
For now I think I will stick with NormalView, rather than Global Variables, I just got the first one working so keep on that path for now, maybe look at changing other bits though
Well, of course you can continue on that rocky path with all the thorny bushes, but why don't you climb up a bit and use the nice, scenic one?
If you're going to have a lot of these in the game, you can do:
// add this to header
import void Say(String beast, String warrior, String thief);
// global script, below all the class selection GUI code
void Say(String beast, String warrior, String thief) {
if (class == 1) player.Say(beast);
if (class == 2) player.Say(warrior);
if (class == 3) player.Say(thief);
}
Now you can use
Say("I think I could probably smash that rock into pieces", "wonder if i could push it out the way?", "wonder if I could Climb over it?");
managed to get a fair bit of code working now, just was over complicating it
function oObject0_Look()
{
player.Say("Now that is a big stasis tube");
Display("Yup, there is the creature inside");
if (player.NormalView < 4) s = "The creatures looks like it is sounds asleep";
else
{
player.Say("Strange looking creature");
Display ("Looks nearly human");
player.Say ("Wonder if the named it yet?");
}
if (player.NormalView == 3 || player.NormalView == 6) player.Say("Though something about that creature seems rather familiar");
}
Guess i was looking for something too complicated, and the other code
function oRock1_Look()
{
Display ("That big damn boulder is blocking the path")
if (player.NormalView == 1 || player.NormalView == 4) player.Say("wonder if i could push it out the way?");
if (player.NormalView == 2 || player.NormalView == 5) player.Sayd("wonder if I could climb over it?");
if (player.NormalView == 3 || player.NormalView == 6) player.Say("I think I could probably smash that rock into pieces.");
}
The only problem was that I had the wrong values in for NormalView
guess that was the rocky path KhrisMUC mentioned
Just out of curiosity, why are using Display and player.Say?
Looking at the strings called with Display, they don't seem to fit the white text boxes used for narration (Display's default behavior), but rather utterances of the player.
So if you've set "display all text as speech" in gen settings, why don't you stick to one of the commands?
I am using both Display and player.Say since i started to use the Display text as a random voice that occurs now and again during play, kinda like a disembodied voice.
easy question and maybe the last to finish the game, how to set an object so that the character walks infront of it all the time instead of moving behind it after the baseline.
to elaborate, I have a boulder blocking a path then the character interacts with it and walks over it (climbs) to the over side, at that point i have made the boulder not solid and i just need to make it appear behind the character, i don't know if the merge with background would work or if it remove object completely
Just set the rock's baseline to 1.
that simple, ok thanks.
one final thing to finish the game, credits, i have looked at othe people asking about it and i understand that I may need to make a new room for it then Display the text I want.
What i need to try and do is have a slow fade from the last playable room after the character has finished talking and then a slow fade into the last room with the text there. I guess that character.visible = false
I'm just not quite sure how to set it up right
so i need to find: a wait function, how to slow the fade in/out of a room, Display text onscreen (Display/New Character?), End the game
You can fade in/out using the FadeIn/Out command.
So use:
SetNextScreenTransition(eTransitionInstant); // disable auto-fading
FadeOut(3); // try a few low values
player.ChangeRoom(x);
In the next room's after fadein, use FadeIn(3);
PS-I believe there's a few modules for credits, including a Stars Wars styled one.
~Trent
Thanks khrisMUC for that code just trying it out now
Trent R, i don't know how to use the modules, though i prefer to program the code myself so i can see what is happening first hand as i go