forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Скрипты и скриптовые ролики. (http://forum.boolean.name/showthread.php?t=2729)

Тарас Шевченко 17.02.2007 00:21

Скрипты и скриптовые ролики.
 
Товарищи-прогеры может кто-нибудь знает какие-нибудь либы для создания скриптов и скриптовых роликов на движке игры? Хочу в игрухе для придания атмосферы сделать скриптовые ролики. Если таковых либ не имеется, то может кто-нибудь подаст идею или поможет реализовать?

HolyDel 17.02.2007 01:41

Re: Скрипты и скриптовые ролики.
 
ИМХО: скриптовая система это не самая сложная. Насет либ, с трудом представляю себе либу скриптовой системы (ведь для каждой игры она бует своя, скриптовая система делается для игры, а не игра для сс), или это систему парсинга имелось ввиду?

SAF 17.02.2007 01:45

Re: Скрипты и скриптовые ролики.
 
Blitz Script Engine (440 Кб)

Тарас Шевченко 17.02.2007 13:09

Re: Скрипты и скриптовые ролики.
 
Цитата:

Сообщение от HolyDel
Насет либ, с трудом представляю себе либу скриптовой системы (ведь для каждой игры она бует своя, скриптовая система делается для игры, а не игра для сс), или это систему парсинга имелось ввиду?

А примеры реализации сс где-нибудь есть? Я просто не знаю с чего начать. А чем отличается сс и систмема парсинга?

Цитата:

Сообщение от SAF

Этот скриптовый движок я уже видел. На нем можно скриптовые ролики сделать?

Progger_Leo 22.02.2007 00:52

Re: Скрипты и скриптовые ролики.
 
Извините за нубовский вопрос, но что такое скриптовая система?.. :@

HolyDel 22.02.2007 01:39

Re: Скрипты и скриптовые ролики.
 
ну вот к примеру:
Код:

dim ps$(16)
Function CMDparse$(st$)
        For i=0 To 16
                ps(i)=""
        Next
        c=1
        a=Instr(st$,"(")-1
        If a=-1 c=0       
        For i=a+2 To Len(st)
                If Mid(st,i,1)="," Or Mid(st,i,1)=" " Or Mid(st,i,1)=")" Then c=c+1 Else ps(c)=ps(c)+Mid(st,i,1)
        Next
        If a=-1 Then cmd$=ps(0) Else cmd$=Mid(st,1,a)
        Return cmd$
End Function

.RunCommand
cc$=Trim(Lower(CMDparse(cmd)))
;DebugLog "cmd :"+cmd$
;DebugLog "cc :"+cc$
;DebugLog "ps1:"+ps(1)
;DebugLog "ps2:"+ps(2)
;DebugLog "ps3:"+ps(3)
Select cc
        Case "clear"
                If ps(1)="" Then ps(1)=tx
                If ps(2)="" Then ps(2)=tz
                If ps(3)="" Then ps(3)=100
                Clear(Int(ps(1)),Int(ps(2)),Int(ps(3)))

        Case "res.add"
                res(myteam,Int(ps(1)))=res(myteam,Int(ps(1)))+Int(ps(2))

        Case "res.set"
                res(myteam,Int(ps(1)))=Int(ps(2))

        Case "world.clear"
                ;#Region [мешаеццо сцуко]
                LockBuffer TextureBuffer(fog_of_war)
                For i=1 To 511
                For j=1 To 511
                        WritePixelFast i,j,$01000000,TextureBuffer(fog_of_war)                       
                        m(i,j)=1
                Next
                Next
                UnlockBuffer TextureBuffer(fog_of_war)
               
                LockBuffer ImageBuffer(fog_of_war_mini)
                For i=1 To 127
                For j=1 To 127
                        WritePixelFast cpx+i,cpz+j,51,ImageBuffer(fog_of_war_mini)
                        m_mini(i,j)=1
                Next
                Next
                UnlockBuffer ImageBuffer(fog_of_war_mini)               
                ;#End Region
       
        Case "unit.add"
                If ps(2)="" Then ps(2)=tx
                If ps(3)="" Then ps(3)=tz
                If ps(4)="" Then ps(4)=myteam
                unit_add(Int(ps(1)),Int(ps(2)),Int(ps(3)),Int(ps(4)))
               
        Case "change.can_unit_add"
                can_unit_add=1-can_unit_add
        Case "change.dip"
                dip(Int(ps(1)),Int(ps(2)))=Int(ps(3))
                dip(Int(ps(2)),Int(ps(1)))=Int(ps(3))
               
End Select
Return

тока набросок. и то исполнимой его части, наверное 1% сделан.
а вообще ИМХО, это система активного управления в игре из-вне (из файла например) где описанны условия и действия которые будут происходить.
насчет условий, мне кажется логичным писать условие и указывать строчку в файле, начианая с которой будет вылоняться "скрипт" файла, до какой-то определенной метки. Есть блокноты, которые показывают номер строчки, или придется самому писать?

Knightmare 22.02.2007 13:42

Re: Скрипты и скриптовые ролики.
 
2Тарас Шевченко
Цитата:

Этот скриптовый движок я уже видел. На нем можно скриптовые ролики сделать?
если руки дойдут сделаю тебе пример на новой версии (с сишным синтаксисом. она уже готова как раз нада примерчики накорябать =)
2HolyDel выполнять скрипт одновременно с его разбором не есть верное решение =) лучше сначала скомпилировать его в псевдокод, а уже потом выполнять его на ВМ =)

Тарас Шевченко 22.02.2007 14:37

Re: Скрипты и скриптовые ролики.
 
Цитата:

Сообщение от Knightmare
2Тарас Шевченко
если руки дойдут сделаю тебе пример на новой версии (с сишным синтаксисом. она уже готова как раз нада примерчики накорябать =)

Буду очень признателен. Если сделаешь кинь пожалуйста на мыло: [email protected]

jimon 22.02.2007 14:38

Re: Скрипты и скриптовые ролики.
 
скриптовая система ето набор программ
они позволяют скомпилировать определеный код в байт код
выполнить етот байт код (виртуальная машина)
и оперировать с ним (тесная связь виртуальной машини с программой)
иногда скриптами можно назвать даже куски кода внутри игры которые отвечают за логику на подобе - ткнул кнопочку и на тебя что-то упало

так же скриптовые системы обладают высоким уровнем абстракции (выше чем у C++)

короче скрипты нужны чтобы вынести логику игры которая часто меняется за исходный код игры, чтобы была возможность не перекомпилировать exe игры :)

Тарас Шевченко 22.02.2007 14:47

Re: Скрипты и скриптовые ролики.
 
2 jimon: Это мне всё известно. Скрипты мне нужны чтобы была атмосферность и киношность. Сценарист требует чтоб ролики были.

jimon 22.02.2007 15:45

Re: Скрипты и скриптовые ролики.
 
Тарас Шевченко
атмосферу вообще не программист делает :)

Тарас Шевченко 22.02.2007 23:31

Re: Скрипты и скриптовые ролики.
 
Цитата:

Сообщение от jimon
Тарас Шевченко
атмосферу вообще не программист делает :)

Я знаю:lol: что это задача гемдизайнеров, но програмнюку надо это реализовать.

johnk 23.04.2007 17:19

Re: Скрипты и скриптовые ролики.
 
Вот, кстати нашел отличный туториал по скриптам
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 159 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

Leito 24.04.2007 15:04

Re: Скрипты и скриптовые ролики.
 
У меня в пиратах есть скриптовая система, можно в файле прописать что угодно и все в игре будет происзодить поразному. круто короче - дней 5 печатал.

ничего трудного нету.
главное побольше команд для скрипта сделать.

Тарас Шевченко 07.05.2007 13:26

Re: Скрипты и скриптовые ролики.
 
Цитата:

Сообщение от Leito
У меня в пиратах есть скриптовая система, можно в файле прописать что угодно и все в игре будет происзодить поразному. круто короче - дней 5 печатал.

ничего трудного нету.
главное побольше команд для скрипта сделать.

Пример можешь дать?

Leito 10.06.2007 02:33

Re: Скрипты и скриптовые ролики.
 
вот отрывок кода из пиратов, может поможет))(тут не вся скриптовая система)

Код:

Function LoadScriptsCommand()
file=ReadFile("DATA\text\scripts.txt")
QSC=0
QHS=0
While Not Eof(file)
        QSC=QSC+1
        ScriptsCommand$(QSC)=ReadLine(file)
        If Left(ScriptsCommand$(QSC),11)="beginscript"
                QHS=QHS+1
                HeadScripts(QHS,1)=Int(Right(ScriptsCommand$(QSC),Len(ScriptsCommand$(QSC))-12))
                HeadScripts(QHS,2)=QSC
        End If
Wend
CloseFile(file)
End Function


Function ScriptsControl()
ScriptsControlStatus=1
For i=1 To QSL
        For j=1 To QHS
                If HeadScripts(j,1)=ScriptsList(i)
                        a=HeadScripts(j,2)
                        k=a+1
                        QTS=0
                        While ScriptsCommand$(k)<>"endscript"
                                TempScripts$(k-a)=ScriptsCommand$(k)
                                k=k+1
                                QTS=QTS+1
                        Wend
                        If QTS<>0
                                ScrLet=1
                                For k=1 To QTS
                                        If ScrLet=1
                                                GameScript(TempScripts$(k))
                                        Else
                                                GameScript("!"+TempScripts$(k))
                                        End If                                       
                                Next
                        End If
                End If
        Next
Next
ScriptsControlStatus=0

For i=1 To QTARS
        If TempAddRemoveScripts(i,2)=1
                gamescript("addscript."+Str(TempAddRemoveScripts(i,1)))
        Else
                gamescript("removescript."+Str(TempAddRemoveScripts(i,1)))
        End If
Next
QTARS=0
End Function

Function ControlCondition(Condition$)
e=0
a$=""
b=1
c$=""
d$=""
p1=0
p2=0
While e=0
        c$=c$+a$
        a$=Mid(Condition$,b,1)
        b=b+1
        If a$="=" Or a$="<" Or a=">" Or a="!" Or a="\" Or a="/" e=1
Wend
d$=Mid(Condition$,b,Len(Condition$)-b+1)

p1=CalcExp(c$)
p2=CalcExp(d$)

Select a$
Case "=" If p1=p2 Return 1 Else Return 0
Case "<" If p1<p2 Return 1 Else Return 0
Case ">" If p1>p2 Return 1 Else Return 0
Case "!" If p1<>p2 Return 1 Else Return 0
Case "\" If p1>=p2 Return 1 Else Return 0
Case "/" If p1<=p2 Return 1 Else Return 0
End Select
End Function

Function TransVar#(var$)
check=0
Select var$
Case "QH"
        Return QH
        check=1
Case "gamescr"
        Return GameScr
        check=1       
Case "millisecs"
        Return MilliSecs()
        check=1
End Select

If Right(var$,1)="#"
        Return ScriptsVar#(Int(Left(var$,Len(var$)-1)))
End If
               
If Left(var$,10)="searchitem" Then
        b=11
        e=0
        a$=""
        c$=""
        d$=""
        g$=""
        While a<>"."
                b=b+1
                g$=g$+a$
                a$=Mid(var$,b,1)
        Wend
        a$=""
        While a<>"."
                b=b+1
                c$=c$+a$
                a$=Mid(var$,b,1)
        Wend
        a=""
        d$=Mid(var$,b+1,Len(var$)-b)
        If g$="hero"
                For i=1 To Qthings
                        If inventory(i)\ID=Int(c$) And inventory(i)\quantity>=Int(Float(d$))
                                e=1
                        End If
                Next               
        Else
                f=0
                For i=1 To QN
                        If NPC(i)\ID$ = g$
                                f=i
                        End If
                Next       
                If f<>0
                        For i=1 To NPC(f)\Qthings
                                If NPC(f)\inv[i]\ID=Int(c$) And NPC(f)\inv[i]\quantity>=Int(Float(d$))
                                        e=1
                                End If
                        Next
                Else
                        For i=1 To QC
                                If Cont(i)\ID$ = g$
                                        f=i
                                End If
                        Next
                        If f<>0
                                For i=1 To cont(f)\Qthings
                                        If cont(f)\inv[i]\ID=Int(c$) And cont(f)\inv[i]\quantity>=Int(Float(d$))
                                                e=1
                                        End If
                                Next                               
                        End If
                End If       
        End If
        Return e
        check=1       
End If

If Left(var$,5)="equip"
        b=7
        c$=""
        a$=""
        d$=""
        While a$<>"."
                c$=c$+a$
                a$=Mid(var$,b,1)
                b=b+1
        Wend
        d$=Mid(var$,b,Len(var$)-b+1)
        e=0
        If Int(c$)=0
                If equip(0)\ID=Int(d$) e=1
        Else
                If equip(1)\ID=Int(d$) e=1
        End If
        Return e
        check=1
End If

If Left(var$,8)="opencont"
        d$=Right(var$,Len(var$)-9)
        e=0
        If GameScr=12
                If cont(Menu12NTC)\ID$=d$ e=1
        End If
        Return e
        check=1
End If

If Left(var$,8)="tradeNPC"
        d$=Right(var$,Len(var$)-9)
        e=0
        If GameScr=11
                If NPC(Menu11NTN)\ID$=d$ e=1
        End If
        Return e
        check=1
End If

If Left(var$,10)="visibility"
        visib#=constant("visibility_degrees")
        b=12
        a$=""
        c$=""
        d$=""
        f=0
        While a$<>"."
                c$=c$+a$
                a$=Mid(var$,b,1)
                b=b+1
        Wend
        d$=Mid(var$,b,Len(var$)-b+1)

        For i=1 To QN
                If NPC(i)\ID$=c$ f=i
        Next
        px1#=EntityX#(NPC(f)\mesh1,1)
        pz1#=EntityZ#(NPC(f)\mesh1,1)
        pyaw#=EntityYaw#(NPC(f)\mesh1,1)
        plook#=NPC(f)\look

        If d$="hero"
                px2#=EntityX#(player(0)\mesh1,1)
                pz2#=EntityZ#(player(0)\mesh1,1)
        Else
                For i=1 To QN
                        If NPC(i)\ID$=d$ f=i
                Next
                px2#=EntityX#(NPC(f)\mesh1,1)
                pz2#=EntityZ#(NPC(f)\mesh1,1)
        End If       
       
        dist#=Sqr((px1#-px2#)*(px1#-px2#)+(pz1#-pz2#)*(pz1#-pz2#))
        If dist<plook#
                rot#=180+rotate(px1#,pz1#,px2#,pz2#)
                pyaw1#=pyaw# - visib#/2
                pyaw2#=pyaw# + visib#/2
                If pyaw2#>=180 And rot#<0 rot#=rot# + 360
                If pyaw1#<-180 And rot#>0 rot#=rot# - 360
               
                If pyaw1#<rot# And pyaw2#>rot#
                        Return 1
                Else
                        Return 0
                End If
        Else
                Return 0
        End If
        check=1
End If

If Left(var$,3)="NPC"
        b=5
        a$=""
        c$=""
        d$=""
        f=0
        While a$<>"."
                c$=c$+a$
                a$=Mid(var$,b,1)
                b=b+1
        Wend
        d$=Mid(var$,b,Len(var$)-b+1)
        For i=1 To QN
                If NPC(i)\ID$ = c$
                        f=i
                End If
        Next
        Select d$
        Case "usetalk" Return NPC(f)\UseTalk
        Case "anim" Return NPC(f)\Anim
        Case "typeai" Return NPC(f)\TypeAI
        Case "dam" Return NPC(f)\Dam
        Case "asp" Return NPC(f)\Asp
        Case "speed" Return NPC(f)\Speed#
        Case "def" Return NPC(f)\Def
        Case "realhp" Return NPC(f)\realhp
        Case "maxhp" Return NPC(f)\MaxHp
        Case "crit" Return NPC(f)\Crit
        Case "distat" Return NPC(f)\distat
        Case "ex" Return NPC(f)\Ex
        Case "look" Return NPC(f)\look
;        Case "number" Return NPC(f)\Number       
        Case "weight" Return NPC(f)\weight
        Case "scalex" Return NPC(f)\ScaleX#
        Case "scaley" Return NPC(f)\ScaleY#
        Case "scalez" Return NPC(f)\ScaleZ#
        Case "yaw" Return NPC(f)\Yaw#
        Case "alive" Return NPC(f)\Alive
        Case "maintalk" Return NPC(f)\maintalk
        Case "qt" Return NPC(f)\QT
        Case "qthings" Return NPC(f)\Qthings
        Case "x" Return EntityX#(NPC(f)\mesh1)
        Case "y" Return EntityY#(NPC(f)\mesh1)
        Case "z" Return EntityZ#(NPC(f)\mesh1)
        End Select
        check=1
End If

If Left(var$,4)="cont"
        b=6
        a$=""
        c$=""
        d$=""
        f=0
        While a$<>"."
                c$=c$+a$
                a$=Mid(var$,b,1)
                b=b+1
        Wend
        d$=Mid(var$,b,Len(var$)-b+1)
        For i=1 To QC
                If cont(i)\ID$ = c$
                        f=i
                End If
        Next
        Select d$
        Case "scalex" Return cont(f)\ScaleX#
        Case "scaley" Return cont(f)\ScaleY#
        Case "scalez" Return cont(f)\ScaleZ#
        Case "yaw" Return cont(f)\Yaw#
        Case "x" Return EntityX#(cont(f)\mesh)
        Case "y" Return EntityY#(cont(f)\mesh)
        Case "z" Return EntityZ#(cont(f)\mesh)
        End Select
        check=1
End If

If Left(var$,4)="mesh"
        b=6
        a$=""
        c$=""
        d$=""
        f=0
        While a$<>"."
                c$=c$+a$
                a$=Mid(var$,b,1)
                b=b+1
        Wend
        d$=Mid(var$,b,Len(var$)-b+1)
        For i=1 To Qmesh
                If Omesh(i)\ID$ = c$
                        f=i
                End If
        Next
        Select d$
        Case "scalex" Return Omesh(f)\ScaleX#
        Case "scaley" Return Omesh(f)\ScaleY#
        Case "scalez" Return Omesh(f)\ScaleZ#
        Case "yaw" Return Omesh(f)\Yaw#
        Case "x" Return EntityX#(Omesh(f)\mesh)
        Case "y" Return EntityY#(Omesh(f)\mesh)
        Case "z" Return EntityZ#(Omesh(f)\mesh)
        End Select
        check=1
End If

If Left(var$,4)="hero"
        d$=Mid(var$,6,Len(var$)-5)

        Select d$
        Case "anim" Return Player(0)\Anim
        Case "st" Return Player(0)\St
        Case "con" Return Player(0)\con
        Case "dex" Return Player(0)\dex
        Case "sd" Return Player(0)\sd
        Case "gd" Return Player(0)\gd
        Case "la" Return Player(0)\la
        Case "ha" Return Player(0)\ha
        Case "ac" Return Player(0)\ac
        Case "ev" Return Player(0)\ev
        Case "tr" Return Player(0)\tr
        Case "dam" Return Player(0)\dam
        Case "asp" Return Player(0)\asp
        Case "speed" Return Player(0)\speed#
        Case "def" Return Player(0)\def
        Case "realhp" Return Player(0)\realhp
        Case "maxhp" Return Player(0)\maxhp
        Case "crit" Return Player(0)\crit
        Case "weight" Return Player(0)\weight
        Case "wed" Return Player(0)\wed
        Case "wec" Return Player(0)\wec
        Case "was" Return Player(0)\was
        Case "wet" Return Player(0)\wet
        Case "ard" Return Player(0)\ard
        Case "art" Return Player(0)\art
        Case "distat" Return Player(0)\distat
        Case "dac" Return Player(0)\dac       
        Case "dev" Return Player(0)\dev
        Case "ex" Return Player(0)\Ex
        Case "lvlexp" Return Player(0)\lvlexp
        Case "level" Return Player(0)\Level
        Case "charpoints" Return Player(0)\CharPoints
        Case "skillpoints" Return Player(0)\SkillPoints
        Case "deadmovietime" Return Player(0)\DeadMovieTime
        Case "movetype" Return Player(0)\MoveType
        Case "qthings" Return Qthings
        Case "x" Return EntityX#(Player(0)\mesh1)
        Case "y" Return EntityY#(Player(0)\mesh1)
        Case "z" Return EntityZ#(Player(0)\mesh1)       
        Case "scalex" Return Player(0)\ScaleX#
        Case "scaley" Return Player(0)\ScaleY#
        Case "scalez" Return Player(0)\ScaleZ#
        Case "yaw" Return Player(0)\Yaw#
        End Select       
        check=1
End If
If check=0 Return Float#(var$)
End Function


Horror 10.06.2007 23:01

Re: Скрипты и скриптовые ролики.
 
JohnK а вот мне тоже хочется поглядеть этот туториал) и что мне терь
40 сообщенией писать?
Цитата:

Скрытый блок, вам нужно написать 200 сообщений, вы написали 159.:
Вам запрещено просматривать содержимое этого блока
[хнык-хнык] попровь если можешь (40 раз флудить не охото)) )

johnk 10.06.2007 23:14

Re: Скрипты и скриптовые ролики.
 
Поправил :)

Horror 11.06.2007 00:42

Re: Скрипты и скриптовые ролики.
 
JohnK - пасибо огромное , интересно почитать)


Часовой пояс GMT +4, время: 19:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot