Graal Forums  

Go Back   Graal Forums > Development Forums > NPC Scripting
FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 08-23-2001, 03:29 AM
joseyisleet joseyisleet is offline
Registered User
Join Date: Aug 2001
Posts: 378
joseyisleet is on a distinguished road
Help me.

Can someome tell me how to make a person 'walk' faster, without being able to walk on walls. Thanks.
__________________
Account used by Josey and Howard.
Ali G: 'Is it cause i Black?'
Reply With Quote
  #2  
Old 08-23-2001, 03:37 AM
Lyndzey8000 Lyndzey8000 is offline
Registered User
Join Date: Mar 2001
Posts: 372
Lyndzey8000 is on a distinguished road
Send a message via ICQ to Lyndzey8000 Send a message via AIM to Lyndzey8000
Do you mean like running boots? Hmm...
NPC Code:

// NPC Made by Lyndzey
if(created){
this.speed=.5;
}
if(playerenters){
toweapons Running Boots;
}
if(weaponfired){
if(this.bootson==0){
this.bootson=1;
}
if(this.bootson==1){
this.bootson=0;
}
if(this.bootson==1&&!onwall(playerx+.1,playery+.4) &&!onwall(playerx+.9,playery+1.4)&&!onwall(playerx +.1,playery+1.4)&&!onwall(playerx+.9,playery+.4)) {
if (playersprite in |1,8| || playersprite in |25,33|) {
if (playerdir==0) {playery-=this.speed}
if (playerdir==1) {playerx-=this.speed}
if (playerdir==2) {playery+=this.speed}
if (playerdir==3) {playerx+=this.speed}
}
}
}


A little messy, but that should work.
__________________
This account is used by Psyhcu because I am too lazy to register my own.
Reply With Quote
  #3  
Old 08-23-2001, 05:14 AM
LiquidIce00 LiquidIce00 is offline
RadioActive Monkeeh
LiquidIce00's Avatar
Join Date: Apr 2001
Location: dirty south
Posts: 2,112
LiquidIce00 is on a distinguished road
Send a message via ICQ to LiquidIce00 Send a message via AIM to LiquidIce00 Send a message via Yahoo to LiquidIce00
onwall = evil
Lyndzeys onwall wouldnt be the best .
x.x and i dont have ne right now that i can post . but Stefan posted one a while back that is like as good as Graal can get
__________________
LiquidIce *Owner* (UnholyNation)
-UN Website
http://www.unholynation.com
-UN Forum
http://forums.unholynation.com
-
-the thinker
-

-
onwall2 for nonp2p (i suck at onwall)
Reply With Quote
  #4  
Old 08-23-2001, 08:17 AM
nyghtGT nyghtGT is offline
Banned
nyghtGT's Avatar
Join Date: Jun 2001
Posts: 3,993
nyghtGT is on a distinguished road
Send a message via AIM to nyghtGT
running boots

//NPC made by Nyght (FAQ)
if (playertouchsme) {toweapons Runnin' Shoes

}

if (weaponfired) {
if (this.activated==0) {
setplayerprop #c, Runnin' Shoes On;
this.activated = 1;
timeout = 0.05;
}
else {
this.activated = 0;
setplayerprop #c, Runnin' Shoes Off;
}
}
if (playerchats && strcontains(#c,speed)) {
if (strequals(#c,speed 0.5)) {
this.speed=0.5;
}
if (strequals(#c,speed 1)) {
this.speed=1;
}
if (strequals(#c,speed 1.5)) {
this.speed=1.5;
}
if (strequals(#c,speed 2)) {
this.speed=2;
}
}
This dont seem right i need to add a onwall thingy i think ....
Reply With Quote
  #5  
Old 08-23-2001, 08:52 PM
joseyisleet joseyisleet is offline
Registered User
Join Date: Aug 2001
Posts: 378
joseyisleet is on a distinguished road
Thank ya.

Thanks, I'll use both of the code and mix 'em around a little bit.
__________________
Account used by Josey and Howard.
Ali G: 'Is it cause i Black?'
Reply With Quote
  #6  
Old 08-23-2001, 10:54 PM
Guest
Posts: n/a
I like mine better It had stars going behind it but i took it out, it looked weird.
NPC Code:

function drawstars()
{
onlyoncevar+=1;
if(onlyoncevar==1)
{
this.savedx=players[player].x;
this.savedy=players[player].y;
}
if(playery+5 < this.savedy || playery-5 > this.savedy)
this.savedy=playery;
if(playerx+5 < this.savedx || playerx-5 > this.savedx)
this.savedx=playerx;

if(this.savedx != players[player].x)
{

players[player].x=((players[player].x-this.savedx)*3)+this.savedx;
if(onwall(playerx+1.6, playery) || onwall(playerx, playery))
players[player].x=this.savedx;
this.savedx=players[player].x;
}
if(this.savedy != players[player].y)
{
// if (onwall(playerx, ((players[player].y-this.savedy)*3)+this.savedy)) // Y movement runs you into wall
// {}else
{

players[player].y=((players[player].y-this.savedy)*3)+this.savedy;
if(onwall(playerx, playery+1.8) || onwall(playerx, playery-.2))
players[player].y=this.savedy;
this.savedy=players[player].y;
}
}
// if(playerx > 58 || playerx < 4 || playery > 58 || playery < 4) //Reached the edge of the map. Does strange things. :|
// {
// umokison=0;
// onlyoncevar=0;
// }
sleep .05; // Run every frame.
if(this.umokison==1) // Only if toggled.
{
drawstars();
}
}
if(playertouchsme)
{
toweapons Umok Boots;
hide;
}
if(weaponfired)
{
if(this.umokison==0)
{
this.umokison=1;
myy=players[player].y;
myx=players[player].x;
mydir=players[player].dir;
players[player].sprite=24;
drawstars();

}
else
{
this.umokison=0;
onlyoncevar=0;
}


Reply With Quote
  #7  
Old 08-23-2001, 11:10 PM
freddyfox freddyfox is offline
Banned
freddyfox's Avatar
Join Date: Mar 2001
Posts: 6,705
freddyfox is on a distinguished road
Straight from the levels pack, the Pegasus Boots script:

NPC Code:

if (playertouchsme) {
say 6;
toweapons Pegasus Boots;
set gotpegasusboots;
}
if (weaponfired) {
this.m=1;
this.oldx = playerx;
this.oldy = playery;

if (this.inuse=0) this.inuse=1; else this.inuse=0;
if (this.inuse=1) timeout=.05
}
if (timeout && this.inuse=1) {
if (playersprite<1 || playersprite>8) {this.inuse=0;}
else {
this.mx=0; this.my=0;
if (playerx<this.oldx) this.mx=this.m;
if (playery<this.oldy) this.my=this.m;
if (playerx>this.oldx) this.mx=-1*this.m;
if (playery>this.oldy) this.my=-1*this.m;
this.dir=10*this.my+this.mx;

//HORIZONTAL movement (X)
this.rx=1;
if (this.mx<0) this.rx=4-1;
if (this.mx>0) this.rx=-1.5-1;
ok=1;
for (i=1;i<=2;i+=.25; ) {
this.rx+=.25;
for (this.ry=1;this.ry<=2.5;this.ry+=.5) {
if (onwall(playerx+this.rx+this.mx,playery+this.ry)) {
ok=0;
}
}
}
if (ok==1) playerx-=this.mx;

//VERTICAL movement (Y)
this.ry=1;
if (this.my<0) this.ry=4.5-1.5;
if (this.my>0) this.ry=-1-1.5;
ok=1;
for (i=1;i<=3;i+=.25; ) {
this.ry+=.25;
for (this.rx=.75;this.rx<=2.5;this.rx+=.5) {
if (onwall(playerx+this.rx,playery+this.ry+this.my)) {
ok=0;
}
}
}
if (ok==1) playery-=this.my;

this.oldx = playerx;
this.oldy = playery;
timeout=.05;
}
}

Reply With Quote
  #8  
Old 08-23-2001, 11:24 PM
Guest
Posts: n/a
nice
Reply With Quote
  #9  
Old 08-24-2001, 09:06 AM
nyghtGT nyghtGT is offline
Banned
nyghtGT's Avatar
Join Date: Jun 2001
Posts: 3,993
nyghtGT is on a distinguished road
Send a message via AIM to nyghtGT
hey Ice

does penny knw your usig her boot script ????
Reply With Quote
  #10  
Old 08-24-2001, 10:17 AM
Guest
Posts: n/a
Re: hey Ice

Quote:
Originally posted by nyghtGT
does penny knw your usig her boot script ????
what?
Reply With Quote
  #11  
Old 08-24-2001, 11:02 AM
nyghtGT nyghtGT is offline
Banned
nyghtGT's Avatar
Join Date: Jun 2001
Posts: 3,993
nyghtGT is on a distinguished road
Send a message via AIM to nyghtGT
please ...

Please dont make me kill you again Ice .. and to make it worse ... i killed you oin m bomy account !!! with 0.5 life ....
Attached Thumbnails
Click image for larger version

Name:	icedead.png
Views:	187
Size:	29.1 KB
ID:	3533  
Reply With Quote
  #12  
Old 08-24-2001, 11:14 AM
nyghtGT nyghtGT is offline
Banned
nyghtGT's Avatar
Join Date: Jun 2001
Posts: 3,993
nyghtGT is on a distinguished road
Send a message via AIM to nyghtGT
(Penny here)

Penny speaking...

Wow, Icepick.. still using my old stale scripts after all this time, huh? It's sure pathetic that after spending so much of your "life" on Graal, you can't script, build levels, or run a server worth a damn.
Besides, anyone who knows me at all would recognize the "umok" vars that I used in that script and realize you stole it.. I find it absolutely silly that you would lie to everyone and say that you wrote it, though...

Everyone here who does NOT happen to be familiar with what a complete ***** Icepick is, check out this page:

http://www.frontiernet.net/~sponge/aiminfo.html

You'll get a good laugh, I'm sure.

BTW, Icepick.. What's with using like 10 images as your sig? Are you TRYING to look dumb? o_O

-Penny, who will never trust a ***** with any of her scripts again.
Reply With Quote
  #13  
Old 08-24-2001, 11:28 AM
joseyisleet joseyisleet is offline
Registered User
Join Date: Aug 2001
Posts: 378
joseyisleet is on a distinguished road
thanks again.

Thanks again.

"Stolen scripts? Made scripts? *** scripts? Lame scripts? Useless scripts? WHO GIVES A DAMN!?"

Just what one of my friends said earlier. =)
Oh yeah, my 'sig' owns jo0 all!
__________________
Account used by Josey and Howard.
Ali G: 'Is it cause i Black?'
Reply With Quote
  #14  
Old 08-24-2001, 08:59 PM
Skatche Skatche is offline
Registered User
Join Date: Aug 2001
Location: Gehennom
Posts: 353
Skatche is on a distinguished road
Send a message via AIM to Skatche
Re: thanks again.

Quote:
Originally posted by joseyisleet
Thanks again.

"Stolen scripts? Made scripts? *** scripts? Lame scripts? Useless scripts? WHO GIVES A DAMN!?"

Just what one of my friends said earlier. =)
Oh yeah, my 'sig' owns jo0 all!
Yes, it's nice. Very minimalistic. The question mark is a nice touch.
__________________
Skatche, head priest of the Cult of Duckduck.
Praise Duckduck!
Reply With Quote
  #15  
Old 08-25-2001, 01:37 AM
kyle0654 kyle0654 is offline
-. .`
kyle0654's Avatar
Join Date: Mar 2001
Posts: 1,000
kyle0654 will become famous soon enough
Quote:
Originally posted by IcePick_2001
I like mine better It had stars going behind it but i took it out, it looked weird.
NPC Code:

function drawstars()
{
onlyoncevar+=1;
if(onlyoncevar==1)
{
this.savedx=players[player].x;
this.savedy=players[player].y;
}
if(playery+5 < this.savedy || playery-5 > this.savedy)
this.savedy=playery;
if(playerx+5 < this.savedx || playerx-5 > this.savedx)
this.savedx=playerx;

if(this.savedx != players[player].x)
{

players[player].x=((players[player].x-this.savedx)*3)+this.savedx;
if(onwall(playerx+1.6, playery) || onwall(playerx, playery))
players[player].x=this.savedx;
this.savedx=players[player].x;
}
if(this.savedy != players[player].y)
{
// if (onwall(playerx, ((players[player].y-this.savedy)*3)+this.savedy)) // Y movement runs you into wall
// {}else
{

players[player].y=((players[player].y-this.savedy)*3)+this.savedy;
if(onwall(playerx, playery+1.8) || onwall(playerx, playery-.2))
players[player].y=this.savedy;
this.savedy=players[player].y;
}
}
// if(playerx > 58 || playerx < 4 || playery > 58 || playery < 4) //Reached the edge of the map. Does strange things. :|
// {
// umokison=0;
// onlyoncevar=0;
// }
sleep .05; // Run every frame.
if(this.umokison==1) // Only if toggled.
{
drawstars();
}
}
if(playertouchsme)
{
toweapons Umok Boots;
hide;
}
if(weaponfired)
{
if(this.umokison==0)
{
this.umokison=1;
myy=players[player].y;
myx=players[player].x;
mydir=players[player].dir;
players[player].sprite=24;
drawstars();

}
else
{
this.umokison=0;
onlyoncevar=0;
}


there's no way you made that when you're asking me on ICQ for the variable for changing the player's heart count...
Reply With Quote
  #16  
Old 08-25-2001, 02:12 AM
LiquidIce00 LiquidIce00 is offline
RadioActive Monkeeh
LiquidIce00's Avatar
Join Date: Apr 2001
Location: dirty south
Posts: 2,112
LiquidIce00 is on a distinguished road
Send a message via ICQ to LiquidIce00 Send a message via AIM to LiquidIce00 Send a message via Yahoo to LiquidIce00
Quote:
Originally posted by kyle0654

there's no way you made that when you're asking me on ICQ for the variable for changing the player's heart count...
that's sad
__________________
LiquidIce *Owner* (UnholyNation)
-UN Website
http://www.unholynation.com
-UN Forum
http://forums.unholynation.com
-
-the thinker
-

-
onwall2 for nonp2p (i suck at onwall)
Reply With Quote
  #17  
Old 08-25-2001, 03:18 AM
BocoC BocoC is offline
Registered User
BocoC's Avatar
Join Date: Jun 2001
Location: Washington State, USA
Posts: 980
BocoC is on a distinguished road
Send a message via AIM to BocoC Send a message via Yahoo to BocoC
I made a perfect onwall script, but I am too lazy to extract the code from my npc. But, basically it checks every half a tile for an onwall statement. Every time it checks, it adds 0.5 to a counter. Now, if you are doing this:

playerx++;

Then if it detects a wall inbetween the starting point and destination of the player, it uses the counter to place the player in front of the wall. It's kinda complicated, but it works perfectly.
__________________
-Boco

FLKJH$TRFG*$(&%>FMG >REN<>F ;.kjsd
Reply With Quote
  #18  
Old 08-25-2001, 03:27 AM
kyle0654 kyle0654 is offline
-. .`
kyle0654's Avatar
Join Date: Mar 2001
Posts: 1,000
kyle0654 will become famous soon enough
Quote:
Originally posted by BocoC
I made a perfect onwall script, but I am too lazy to extract the code from my npc. But, basically it checks every half a tile for an onwall statement. Every time it checks, it adds 0.5 to a counter. Now, if you are doing this:

playerx++;

Then if it detects a wall inbetween the starting point and destination of the player, it uses the counter to place the player in front of the wall. It's kinda complicated, but it works perfectly.
Fun (though you'll find that .5 tiles aren't quite accurate enough if you do anything really advanced). 1/16 tiles would be incredibly accurate, but also somewhat inefficient.

(Washington eh?)
Reply With Quote
  #19  
Old 08-25-2001, 03:33 AM
BocoC BocoC is offline
Registered User
BocoC's Avatar
Join Date: Jun 2001
Location: Washington State, USA
Posts: 980
BocoC is on a distinguished road
Send a message via AIM to BocoC Send a message via Yahoo to BocoC
Re: hey Ice

Quote:
Originally posted by nyghtGT
does penny knw your usig her boot script ????
Do you know you are using mine?
__________________
-Boco

FLKJH$TRFG*$(&%>FMG >REN<>F ;.kjsd
Reply With Quote
  #20  
Old 08-25-2001, 03:35 AM
BocoC BocoC is offline
Registered User
BocoC's Avatar
Join Date: Jun 2001
Location: Washington State, USA
Posts: 980
BocoC is on a distinguished road
Send a message via AIM to BocoC Send a message via Yahoo to BocoC
Quote:
Originally posted by kyle0654

Fun (though you'll find that .5 tiles aren't quite accurate enough if you do anything really advanced). 1/16 tiles would be incredibly accurate, but also somewhat inefficient.

(Washington eh?)
Well, I might be using 0.25 tiles. Not quite sure. I just know that it works. In my gravity script, I was falling like, 6.234 tiles at a time, and I still landed perfectly.

Yes, I live in Washington State. o.O
__________________
-Boco

FLKJH$TRFG*$(&%>FMG >REN<>F ;.kjsd
Reply With Quote
  #21  
Old 08-25-2001, 04:09 AM
CyanideSR71 CyanideSR71 is offline
Registered User
CyanideSR71's Avatar
Join Date: Jun 2001
Location: Canada
Posts: 460
CyanideSR71 is on a distinguished road
Did my remote controlled car have perfect onwall detection (other than I was too lazy to check for onwall on any other point but the exact middle)?
__________________
Cyanide SR71
Former Shadow Dragon
Co-Owner of what was Murasamune
Reply With Quote
  #22  
Old 08-25-2001, 04:13 AM
joseyisleet joseyisleet is offline
Registered User
Join Date: Aug 2001
Posts: 378
joseyisleet is on a distinguished road
hmm.

how long have you guys/girls/men/women been in graal?
__________________
Account used by Josey and Howard.
Ali G: 'Is it cause i Black?'
Reply With Quote
  #23  
Old 08-25-2001, 04:37 AM
BocoC BocoC is offline
Registered User
BocoC's Avatar
Join Date: Jun 2001
Location: Washington State, USA
Posts: 980
BocoC is on a distinguished road
Send a message via AIM to BocoC Send a message via Yahoo to BocoC
Since Graal 1.4
__________________
-Boco

FLKJH$TRFG*$(&%>FMG >REN<>F ;.kjsd
Reply With Quote
  #24  
Old 08-25-2001, 05:02 AM
Lionel-Jonson Lionel-Jonson is offline
Fly away on my zephyr
Join Date: Jul 2001
Location: Never
Posts: 2,798
Lionel-Jonson is on a distinguished road
Send a message via ICQ to Lionel-Jonson Send a message via AIM to Lionel-Jonson Send a message via Yahoo to Lionel-Jonson
Quote:
Originally posted by kyle0654

there's no way you made that when you're asking me on ICQ for the variable for changing the player's heart count...
lmao
Reply With Quote
  #25  
Old 08-25-2001, 07:30 PM
mhermher mhermher is offline
galase galase!
mhermher's Avatar
Join Date: Jun 2001
Location: Sweden, Stockholm.
Posts: 2,012
mhermher is on a distinguished road
Send a message via ICQ to mhermher Send a message via AIM to mhermher Send a message via Yahoo to mhermher
Quote:
Originally posted by CyanideSR71
Did my remote controlled car have perfect onwall detection (other than I was too lazy to check for onwall on any other point but the exact middle)?

Um do you mind if i take the GFX for the car and the idea? i made my own car it have same functions but its your GFX and idea and i wanna know if i can use them
__________________
Donate money for my trip to Germany

Adiarde Manager
Reply With Quote
  #26  
Old 08-26-2001, 10:11 AM
Grease_Man2 Grease_Man2 is offline
Registered User
Join Date: Jul 2001
Location: Coral Springs, Florida
Posts: 291
Grease_Man2 is on a distinguished road
Send a message via ICQ to Grease_Man2 Send a message via AIM to Grease_Man2 Send a message via Yahoo to Grease_Man2
(Chance)

penny made that boot script...i can tell, the umok is a dead give away...ice pick stole what had to be over 50 of its weapons when it was working on its own server...Ice asked it to send him a level so he could see the progress, this was before Penny knew Ice Pick real well, BOOM! ice pick stole ALL the weapons and called them his own, luckily they were all in the beta stages and penny only sent 1 level of weapons and not a whole server
the end
__________________
"When he holds you close, when he pulls you near, When he says the words you've been needing to hear, I'll wish I was him 'cause those words are mine, To say to you till the end of time." -Bon Jovi, 'always'
if you think i'm *** for listenin to it then f*ck you, and if you understand the lyrics, then i'm sorry that you gotta go through that pain too :'0(
Reply With Quote
  #27  
Old 08-26-2001, 10:15 AM
Grease_Man2 Grease_Man2 is offline
Registered User
Join Date: Jul 2001
Location: Coral Springs, Florida
Posts: 291
Grease_Man2 is on a distinguished road
Send a message via ICQ to Grease_Man2 Send a message via AIM to Grease_Man2 Send a message via Yahoo to Grease_Man2
hey guy, here's a script for ya...it gradually takes MP and you can turn them on and off, base of NPC made by Nyght aka Xero and i edited it a bunch, (if u still need the NPC i recomend this one). hope ya like it


// NPC made by Legend Xero
if (playertouchsme) {
toweapons TEST *****!!;
}
if (weaponfired&&playermp=>.5) {
if (this.activated==0) {
this.activated = 1;
timeout = 0.05;
}
else {
this.activated = 0;
}
}
if (timeout==0 && this.activated==1) {
if (!onwall(playerx,playery) && !onwall(playerx,playery+0.5) && !onwall(playerx,playery+1) && !onwall(playerx,playery+1.5) && !onwall(playerx,playery+2) && !onwall(playerx,playery+2.5) && !onwall(playerx,playery+3)
&& !onwall(playerx+0.5,playery) && !onwall(playerx+0.5,playery+0.5) && !onwall(playerx+0.5,playery+1) && !onwall(playerx+0.5,playery+1.5) && !onwall(playerx+0.5,playery+2) && !onwall(playerx+0.5,playery+2.5) && !onwall(playerx+0.5,playery+3)
&& !onwall(playerx+1,playery) && !onwall(playerx+1,playery+0.5) && !onwall(playerx+1,playery+1) && !onwall(playerx+1,playery+1.5) && !onwall(playerx+1,playery+2) && !onwall(playerx+1,playery+2.5) && !onwall(playerx+1,playery+3)
&& !onwall(playerx+1.5,playery) && !onwall(playerx+1.5,playery+0.5) && !onwall(playerx+1.5,playery+1) && !onwall(playerx+1.5,playery+1.5)&& !onwall(playerx+1.5,playery+2) && !onwall(playerx+1.5,playery+2.5) && !onwall(playerx+1.5,playery+3)
&& !onwall(playerx+2,playery) && !onwall(playerx+2,playery+0.5) && !onwall(playerx+2,playery+1) && !onwall(playerx+2,playery+1.5) && !onwall(playerx+2,playery+2) && !onwall(playerx+2,playery+2.5) && !onwall(playerx+2,playery+3)
&& !onwall(playerx+2.5,playery) && !onwall(playerx+2.5,playery+0.5) && !onwall(playerx+2.5,playery+1) && !onwall(playerx+2.5,playery+1.5) && !onwall(playerx+2.5,playery+2) && !onwall(playerx+2.5,playery+2.5) && !onwall(playerx+2.5,playery+3))
{
playermp-=.5;
if (keydown(0)) {
playery -= 1;
}
if (keydown(1)) {
playerx -= 1;
}
if (keydown(2)) {
playery += 1;
}
if (keydown(3)) {
playerx += 1;
}
if (playermp=0) {this.activated = 0;}
if (playerx > 61) {
playerx = 61;
}
if (playery > 61) {
playery = 61;
}
if (playerx < 0) {
playerx = 0;
}
if (playery < 0) {
playery = 0;
}
}
timeout = 0.05;
}
__________________
"When he holds you close, when he pulls you near, When he says the words you've been needing to hear, I'll wish I was him 'cause those words are mine, To say to you till the end of time." -Bon Jovi, 'always'
if you think i'm *** for listenin to it then f*ck you, and if you understand the lyrics, then i'm sorry that you gotta go through that pain too :'0(
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 05:35 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.