Forum

Frikbots & Skins

Discuss Artificial Intelligence and Bot programming.

Moderator: InsideQC Admins

Frikbots & Skins

Postby redrum » Tue Jun 26, 2007 5:01 am

Does anyone know how to give custom skins to Frikbots?
When I spawn them in QW the always use the base skin.
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby Dr. Shadowborg » Tue Jun 26, 2007 3:01 pm

First, you'll need a player.mdl with some different skins on it. Second, look for BotName in bot_misc.qc. Just stick in some self.skin = X where X is the skin number.
User avatar
Dr. Shadowborg
InsideQC Staff
 
Posts: 1110
Joined: Sat Oct 16, 2004 3:34 pm

Postby redrum » Tue Jun 26, 2007 4:34 pm

Can you explain how to create / modify the player.mdl file?
I tried to read the file but it was all garbled :( .
Thanks.
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby leileilol » Tue Jun 26, 2007 4:35 pm

quakeworld doesn't use the player.mdl skin hack
leileilol
 
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Postby Dr. Shadowborg » Tue Jun 26, 2007 9:49 pm

CheapAlert wrote:quakeworld doesn't use the player.mdl skin hack


...It doesn't?

God, I loathe QuakeWorld. :/
User avatar
Dr. Shadowborg
InsideQC Staff
 
Posts: 1110
Joined: Sat Oct 16, 2004 3:34 pm

Postby FrikaC » Tue Jun 26, 2007 11:57 pm

You need to change this code found in bot_qw.qc:

Code: Select all
   // FIXME: do teams properly
   // note this has no effect on infokey
   WriteByte(2, 92 );  // \
   WriteByte(2, 115); // s
   WriteByte(2, 107); // k
   WriteByte(2, 105); // i
   WriteByte(2, 110); // n
   WriteByte(2, 92);  // \
   WriteByte(2, 98);  // b
   WriteByte(2, 97);  // a
   WriteByte(2, 115); // s
   WriteByte(2, 101); // e
   WriteByte(2, 92);  // \


Good luck!
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Postby redrum » Wed Jun 27, 2007 8:12 pm

Is there a way for each bot to have their own skin?
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby FrikaC » Wed Jun 27, 2007 8:49 pm

Yes.
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Postby Supa » Thu Jun 28, 2007 12:45 am

First a disclaimer:
1) My only real experience in QW modding is from my stupid QW speedmod, FishQuake.
2) I'm not actually looking at the FBX code right now, just working from FrikaC's post, thusly I have no way of actualy checking wheter or not this will work.
3) I am a muppet.

That said:

Code: Select all
97    a   104   h   111   o   118   v
98    b   105   i   112   p   119   w
99    c   106   j   113   q   120   x
100   d   107   k   114   r   121   y
101   e   108   l   115   s   122   z
102   f   109   m   116   t
103   g   110   n   117   u


So if you want one bot to use skin 'foo', you'd do:

Code: Select all
   WriteByte(2, 92 ); // \
   WriteByte(2, 115); // s
   WriteByte(2, 107); // k
   WriteByte(2, 105); // i
   WriteByte(2, 110); // n
   WriteByte(2, 92);  // \
   WriteByte(2, 102); // f
   WriteByte(2, 111); // o
   WriteByte(2, 111); // o
   WriteByte(2, 92);  // \


Taking this further you could try this:

Code: Select all
   WriteByte(2, 92 ); // \
   WriteByte(2, 115); // s
   WriteByte(2, 107); // k
   WriteByte(2, 105); // i
   WriteByte(2, 110); // n
   WriteByte(2, 92);  // \

   if (somenumber == 0)
   {
         WriteByte(2, 98);  // b
         WriteByte(2, 97);  // a
         WriteByte(2, 115); // s
         WriteByte(2, 101); // e
   }
   else if (somenumber == 1)
   {
         WriteByte(2, 102); // f
         WriteByte(2, 111); // o
         WriteByte(2, 111); // o
   }
   else if (somenumber == 2)
   {
         WriteByte(2, 98);  // b
         WriteByte(2, 97);  // a
         WriteByte(2, 114); // r
   }

   WriteByte(2, 92);  // \

(And so on..)

Of course, I could be wrong. =)
User avatar
Supa
 
Posts: 164
Joined: Tue Oct 26, 2004 8:10 am

Postby Electro » Thu Jun 28, 2007 1:15 am

Another step to take that to would be to make use of string manipulation stuff in newer engines

but of course that's probably not desirable because backwards compatibility would be shot

If it's not an issue then you could rather easily write a function that iterates through every letter in the skin and substitues it for the number and does the writebyte accordingly.

What a hassle!
Benjamin Darling
http://www.bendarling.net/

Reflex - In development competitive arena fps combining modern tech with the speed, precision and freedom of 90's shooters.
http://www.reflexfps.net/
Electro
 
Posts: 312
Joined: Wed Dec 29, 2004 11:25 pm
Location: Brisbane, Australia

Postby redrum » Thu Jun 28, 2007 3:13 am

FrikaC, how would you do it?
Welcome to the Overlook Hotel: The-Overlook-Hotel.game-server.cc
User avatar
redrum
 
Posts: 410
Joined: Wed Mar 28, 2007 11:35 pm
Location: Long Island, New York

Postby Sajt » Thu Jun 28, 2007 4:26 am

And the next question you would ask is, hmm. But how would Jesus do it?
F. A. Špork, an enlightened nobleman and a great patron of art, had a stately Baroque spa complex built on the banks of the River Labe.
Sajt
 
Posts: 1215
Joined: Sat Oct 16, 2004 3:39 am

Postby leileilol » Thu Jun 28, 2007 4:29 am

he'd say use quake2.
leileilol
 
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Postby Teiman » Thu Jun 28, 2007 8:00 am

Jesus is a crank. He will use a hack like totally different models.

http://en.wikipedia.org/wiki/Crank_%28person%29
Teiman
 
Posts: 309
Joined: Sun Jun 03, 2007 9:39 am

Postby FrikaC » Thu Jun 28, 2007 2:16 pm

Supa wrote:First a disclaimer:
1) My only real experience in QW modding is from my stupid QW speedmod, FishQuake.
2) I'm not actually looking at the FBX code right now, just working from FrikaC's post, thusly I have no way of actualy checking wheter or not this will work.
3) I am a muppet.

That said:

Code: Select all
97    a   104   h   111   o   118   v
98    b   105   i   112   p   119   w
99    c   106   j   113   q   120   x
100   d   107   k   114   r   121   y
101   e   108   l   115   s   122   z
102   f   109   m   116   t
103   g   110   n   117   u


So if you want one bot to use skin 'foo', you'd do:

Code: Select all
   WriteByte(2, 92 ); // \
   WriteByte(2, 115); // s
   WriteByte(2, 107); // k
   WriteByte(2, 105); // i
   WriteByte(2, 110); // n
   WriteByte(2, 92);  // \
   WriteByte(2, 102); // f
   WriteByte(2, 111); // o
   WriteByte(2, 111); // o
   WriteByte(2, 92);  // \


Taking this further you could try this:

Code: Select all
   WriteByte(2, 92 ); // \
   WriteByte(2, 115); // s
   WriteByte(2, 107); // k
   WriteByte(2, 105); // i
   WriteByte(2, 110); // n
   WriteByte(2, 92);  // \

   if (somenumber == 0)
   {
         WriteByte(2, 98);  // b
         WriteByte(2, 97);  // a
         WriteByte(2, 115); // s
         WriteByte(2, 101); // e
   }
   else if (somenumber == 1)
   {
         WriteByte(2, 102); // f
         WriteByte(2, 111); // o
         WriteByte(2, 111); // o
   }
   else if (somenumber == 2)
   {
         WriteByte(2, 98);  // b
         WriteByte(2, 97);  // a
         WriteByte(2, 114); // r
   }

   WriteByte(2, 92);  // \

(And so on..)

Of course, I could be wrong. =)


You are absolutely correct. As far as actual implementation, somenumber can be self.b_num, which is the bot template number for names & colors. Also, if you want to make the code FrikQCC/fteqcc specific you can use single quoted letters instead of the ascii-code.
FrikaC
Site Admin
 
Posts: 1026
Joined: Fri Oct 08, 2004 11:19 pm

Next

Return to Artificial Intelligence

Who is online

Users browsing this forum: No registered users and 1 guest