Skip to main content
GameDev.net gamedev.net
🔒 Locked

Scripting System

Started by klubbkid Sep 20, 2000 at 12:48 PM 7 replies 400+ views
Original Post
klubbkid
klubbkid
Hi, I''m looking for a way to implement a scripting system in my game. I don''t need to compile the scripts or anything...I just want something like: % Script MovePlayer(01, 10, 10); % End Script I just want it to read the file and determine if it''s the MovePlayer command then it should call the function MoveGamePlayer (playernum, newx, newy); Any suggestions? Thanks, - Derek
Cyberdrek
Cyberdrek
Hi there,
Verry simple implement it so the program reads line by line. Then, you just need to read the line, compare with a list of keywords to know what action to take and then from there. That''s the easiest way I''ve seen of doing it. Bare in mind though that IT IS VERRY slow. Anyhow, this was what my first scripting language was like for the 1st game I did( a small RPG ).

Just trying to help out... ( no flames please )...



Cyberdrek
Headhunter Soft
DLC Multimedia
[Cyberdrek | ]
JonnyQuest
JonnyQuest
hmm...
What faster ways are there? I''ll be needing one for my game too at some point, and the only thing I know is that I''m going to transfer (compile?) the scripts to bytecode, so any sluggishness due to spaces, case insensitivity will be gone.

Have anything better than that? And nothing hard-coded, obviously.

- JQ
pmjordan@gmx.at

lead programmer,
PWC Software
~phil
Cyberdrek
Cyberdrek
As for a faster method, I really don''t know of any others. I only used 1 scripting tool but I do know that parsing text takes a long time even for compiled code. BTW, you won''t have a choice but to hardcode some functions so that the program is able to read the bytecode or the txt file...

Anyhow, if anybody else has some ideas about creating a scripting language, feel free to join in...




Cyberdrek
Headhunter Soft
DLC Multimedia
[Cyberdrek | ]
void*
void*
well, you could use Lua, instead of making the entire scripting language yourself. (though it allows for more complexity than simple MovePlayer(...), it lets you tie your code directly to your script, and therefore makes the script execution very fast).

Alternatively, if you want to just make a bare-bones scripting language (in case you feel like extra functionality will just be too much clutter (it isn''t, IMO)), you''ll have to write the parsing yourself (which shouldn''t be hard, since it''s bare-bones) but you can choose to parse everything into a buffer or linked-list set of triggers, then the only slowdown is during the load process...

any other ideas?

"Man is the only animal that laughs and weeps; for he is the only animal that is struck with the difference between what things are and what they ought to be."
        --William Hazlitt
Greenspun's Tenth Rule of Programming: "Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp."
POINT
POINT
i would tend to stay away from bytecode scripting (or bytecode anything for that matter). imo, everything should be text based for simplicity of editing (except for stuff like bmp''s and wav''s, obioustly). most scripts will only be parsed once per level load anyway.
Sunriath
Sunriath
Your implementation all depends upon your needs as far as speed, power, and flexibility are concerned (and how much work you want to do). If you wanted to parse a script text file, I would use lex to generate a lexical analyzer that will run a lot faster and be easier to maintain and implement than writing your own recognizer for keywords (trust me, I''ve written one). Lex compiles your language description into a table that its optimized algorithms use to quickly get the next token. Lex''s output is C source code for you to link with your program. Here are a couple of possible solutions:

Simplest: If you only need simple scripting where you basically just call simple commands (such as moveplayer, changeweapon, etc), I would use lex and define your commands as your recognized keywords. You could then tell lex to get the next token and lex will return which command it got. From there you could easily execute the correct code to handle the command by getting the proper amount of arguments from lex and executing your command. Error detection shouldn''t be that hard either.

Harder: If you need support for conditionals and variable declarations, I would consider writing your own mini-language using lex and yacc. The dragon book (Compiler: Principles, Techniques, and Tools) is an excellent reference for implementing this. Lex and Yacc are automated tools that use highly optimized algorithms that can generate faster code than you can write by hand.

Easiest: Use an existing scripting language. The one I found that looked like it had promise was the Small programming language ( http://www.compuphase.com/small.htm ) which is designed to add scripting to existing programs. However, there are many languages out there. Try reading the Gamasutra article "Adding Languages to Game Engines": http://www.gamasutra.com/features/programming/100397/languages1.htm
I hope this helps.

Sunriath

Harvester
Harvester
The fastest way for the simplicity of scripting code that you ask will always be to write your own ''compiler''.
Translate all your keywords into a DWORD value, which represent slots in an array. A simple command of
Move(Player1, 0, 0, 0)

could be interpreted into something like
0000 0001 0000 0000 0000
(that''s what you''d see in a hex-editor).

And for simplicity, you can ''compile''/''binary code'' the script during level load time.

In any other case, i''d prefer using something like small.
... LEMMINGS ... LEMMINGS ... LEMMINGS ... LEM..... SpLaSh!...Could this be what we stand like before the mighty One?Are we LeMmIngS or WhAt!? ;)
Solarbeam
Solarbeam
Yeah, I need to work on a scripting language, too. Mine has to be sent from the client to the server and contains a description of that person''s weapons, abilities, etc. Any really good way to do this other than having to read from the move file every time someone punches or kicks?
------------------------------Large explosion consumes building, hero walks away unharmed (wtf? why?) CUT

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.