Code archives/Miscellaneous/Scripting engine

This code has been declared by its author to be Public Domain code.

Download source code

Scripting engine by Neo Genesis102001
The code below shows the skeleton of my existing script code. It is designed to read text files and pick out information stored in them. Text strings must be in quotation marks (") and all parameters seperated by commas (,). It also allows you to place comments in your document by placing a ";" symbol within your doc.

Any feedback is appreciated.
; before calling cutscene function, I read the script commands into an array...

Global scriptcount
Dim scom$( 49 )			; holds command string
Dim sact( 49 )			; holds action
Dim param$( 49 )			; for storing multiple parameters

Restore scriptcommands
Read scriptcount
For i = 1 To scriptcount
	Read scom$( i-1 )	; command line
	Read sact( i-1 )	; actions for script command
Next

Function Cutscene( val )

	scene = ReadFile("cutscenes/scene"+val+".scn")
	If scene = 0 Return False

	While Not Eof( scene )
		ClearArrays()
		ReadText = False
		temp$ = ReadLine( scene )	; grab a line of information
	
		; cycle through line, picking out bits we want

		curparam = 0
		For i = 1 To Len( temp$ )
			section$ = Mid$( temp$, i, 1 )
			If section$ = ";" Exit	; jump out of commented sections
			If section$ = ","
				curparam = curparam + 1
				If curparam > 49 RuntimeError("Too many parameters!")
			EndIf	
			
			For x = 48 To 57
				If section$ = Chr$( x )
					param$(curparam) = param$(curparam) + section$
					ntmp$ = ""
					While ntmp$ <> "," And ntmp$ <> ""
						param$( curparam ) = param$( curparam ) + ntmp$
						ntmp$ = Mid$( temp$, i, 1 )
						i = i + 1
					Wend
					Exit
				EndIf
			Next

			For x = 0 To (scriptcount - 1)
				If Mid$( temp$, i, Len( scom$( x ) ) ) = scom$( x )
					takeaction = sact( x )
					i = i + Len( scom$( x ))
				EndIf
			Next
			
			If section$ = Chr$( 34 )
				i = i + 1
				ntmp$ = ""
				Repeat
					param$( curparam ) = param$( curparam ) + ntmp$
					ntmp$ = Mid$( temp$, i, 1 )
					If ntmp$ = Chr$( 34 ) Exit	; stop if quote symbol (") found
					i = i + 1
					If i > Len( temp$ ) Exit	; stop of end of line reached
				Forever
			EndIf
			
		Next
		
		Select takeaction
			Case 1
				; your commands here
				; use param( parameter number ) for numbers
				; and param$( parameter ) for text

				; Example: Chat 50, 50, "Hello world"
				; Text param(0), param(1), param$( 0 )
			Case 2

			Case 3
		End Select
		
		; update movements/collisions and draw world here

		Flip
		
	Wend
End Function

Function ClearArrays()

	For i = 0 To 5
		param$(i) = ""
	Next

End Function

.scriptcommands

; format: "CommandName", action
; Action refers to the takeaction command above

Data 6			; number of commands
Data "CreateChar", 1
Data "CreateNPC", 2
Data "BGMusic", 3
Data "FGMusic", 4
Data "FadeMuse", 5
Data "Animate", 6

Comments

Pinete2005
simple and great
;)


Code Archives Forum