Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Source][GRA] RiddleLab


Rekomendowane odpowiedzi

Opublikowano

logolsn.png

 

RiddleLab jest silnikiem do gier 2D, umożliwia budowanie planszy z różnych bloków z własnymi grafikami, zmianę grafiki gracza, instrukcje warunkowe i dużo innych. Napisałem go razem z kolegą. Tworzenie poziomów jest łatwe, przykładowa mapa jest dostępna w paczce w linku poniżej. Do poziomu może być załączone dość dużo skryptów i różne grafiki bloków i gracza. Wadą jest brak przezroczystości. Samo pisanie skryptów też jest proste, wystarczy przejrzeć kod lub załączony przykładowy poziom żeby je zrozumieć.

 

 

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=pic/RL.ico
#AutoIt3Wrapper_Outfile=RiddleLab.exe
#AutoIt3Wrapper_Res_Fileversion=1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Silvarerum
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
RIDDLELAB (v.1.0.0)
---------------------
Copyright (c) 2012, Silvarerum
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1.Redistributions of source code must retain the above copyright notice,
 this list of conditions and the following disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice,
 this list of conditions and the following disclaimer in the documentation and/or other materials
 provided with the distribution.
3.Neither the name of the Silvarerum nor the names of its contributors may be used to endorse
 or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE SILVARERUM TEAM "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ce

;FOR YOUR INFORMATION: ALL ORIGINAL COMMENTS ARE IN POLISH
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListBox.au3>
#include <file.au3>
#include <array.au3>
#include <string.au3>
#include <misc.au3>
#include <ScreenCapture.au3>

Global $level_folder = Chr(0)
;akceptowne komendy z dawnej bliblioteki Script Reader
Global $accepted_commands[1]
$accepted_commands[0] = "close"
_ArrayAdd($accepted_commands, "quit")
_ArrayAdd($accepted_commands, "msg")
_ArrayAdd($accepted_commands, "ask")
_ArrayAdd($accepted_commands, "ask_advanced")
_ArrayAdd($accepted_commands, "screen_shoot")
_ArrayAdd($accepted_commands, "point")
_ArrayAdd($accepted_commands, "goto")
_ArrayAdd($accepted_commands, "if") ;--- Funkcja w grze: if_true
_ArrayAdd($accepted_commands, "script") ;--- Funkcja w grze: start_script
_ArrayAdd($accepted_commands, "player_set_pos")
_ArrayAdd($accepted_commands, "player_set_graphic")
_ArrayAdd($accepted_commands, "player_teleport_to_map")
_ArrayAdd($accepted_commands, "global_value_get")
_ArrayAdd($accepted_commands, "global_value_set")
_ArrayAdd($accepted_commands, "global_value_search")
_ArrayAdd($accepted_commands, "math_random")
_ArrayAdd($accepted_commands, "math_add")
_ArrayAdd($accepted_commands, "math_subtract")
_ArrayAdd($accepted_commands, "math_multiply")
_ArrayAdd($accepted_commands, "math_divide")
_ArrayAdd($accepted_commands, "math_floor")
_ArrayAdd($accepted_commands, "math_ceiling")
_ArrayAdd($accepted_commands, "math_even")
_ArrayAdd($accepted_commands, "math_pow")
_ArrayAdd($accepted_commands, "math_sqrt")
_ArrayAdd($accepted_commands, "block_get_id")
_ArrayAdd($accepted_commands, "block_set_id")
_ArrayAdd($accepted_commands, "string_left")
_ArrayAdd($accepted_commands, "string_right")
_ArrayAdd($accepted_commands, "string_lenght")
_ArrayAdd($accepted_commands, "string_upper")
_ArrayAdd($accepted_commands, "string_lower")
_ArrayAdd($accepted_commands, "string_reverse")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Tablice
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Warstwy bloków
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Multimapa
Opt("MouseCoordMode", 2)
$dll = DllOpen("user32.dll")
Global $okno = 1
Global $win_size_x = 500 ;domyslna wartosc szerokosci okienka
Global $win_size_y = 500 ;domyslna wartosc wysokosci okienka
Global $win_pos_x = (@DesktopWidth/2)-($win_size_x/2) ;pozycja okienka
Global $win_pos_y = (@DesktopHeight/2)-($win_size_y/2)
Global $win = GUICreate("RiddleLab", $win_size_x, $win_size_y, $win_pos_x, $win_pos_y) ;stworzenie GUI
GUISetBkColor(0xFFFFFF) ;kolor tła GUI
GUISetState(@SW_SHOW) ;GUI domyslnie na wierzchu

;===================================================================================================================
;Globalne dla poziomów
Global $trigger,$mouse_postion[2],$level_map ;zmienne globalne dot ?okienka?
Global $player_x,$player_y,$player_id,$player_graphic = "player.bmp" ;zmienne globalne dot. postaci
Global $level_stage,$level_size,$level_autor,$level_name ;zmienne globalne dot. levelu

While 1
WinSetTitle($win, "", "RiddleLab")
IF $okno = 1 then main()
IF $okno = 2 then _exit()
IF $okno = 3 then level()
IF $okno = 4 then game()
if $okno = 5 Then _licencja()
IF $okno = -1 then error(0,0)
WEnd

Func error($error_text, $error_problem)
$error_problem="/empty/"
;rodzaje błędów
Switch $error_text
case 0
$error_temp= "Nieokreslony błąd"
Case 1
$error_temp="Zły rozmiar poziomu."
Case 2
$error_temp="Brak pliku mapy poziomu " &$error_problem
Case 3
$error_temp="Brak pliku danych poziomu "&$error_problem
Case 4
$error_temp="Brak komendy skryptowej "&$error_problem
Case 5
$error_temp="Brak grafiki bloczka "&$error_problem
Case 6
$error_temp="Brak nawiasów w komendzie " &$error_problem
Case 7
$error_temp="Błąd w parametrach komendy " &$error_problem
Case 8
$error_temp="Zła ilosc parametrów komendy " &$error_problem
Case 9
$error_temp="Brak pliku skryptu " &$error_problem
Case 10
$error_temp="Brak danych pliku bloku "&$error_problem
Case 11
$error_temp="Brak wyzwalacza "&$error_problem
Case 12
$error_temp="Nie znaleziono rozmiaru poziomu"
Case 13
$error_temp="Gracz przekroczył granice poziomu"
EndSwitch
;STARE KOMENTARZE ROMANA, PRZED POPRAWIENIEM FUNKCJI
;- Nieokreślony błąd = 0
;- Zły rozmiar poziomu = 1
;- Brak pliku mapy poziomu = 2, $text = nazwa mapy
;- Brak pliku danych poziomu = 3
;- Brak komendy skryptowej = 4, $text = zła komenda,
;- Brak grafiki bloczka = 5, $text = id bloczka
;- Brak nawiasów w komendzie = 6, $text = zła komenda
;- Błąd w parametrach komendy = 7, $text = zła komenda,
;- Zła ilość parametrów komendy = 8, $text = zła komenda,
;- Brak pliku skryptu = 9, $text = plik
;- Brak pliku danych bloku = 10, $text = blok
;- Brak wyzwalacza = 11, $text = obecny wyzwalacz
;- Nie znaleziono rozmiaru poziomu = 12
;- Gracz przekroczył granice poziomu = 13
MsgBox(0,"Błąd",$error_temp)
_exit()
EndFunc
Func _exit()
;mozna potem wstawic jakąs zwracaną wartosc
Exit
EndFunc

Func main()
Local $ver = GUICtrlCreateLabel("Ver. 1.0.0", 11, 452, 60, 17)
Local $svr= GUICtrlCreateLabel("©Silvarerum 2012",9,436,120,17)
Local $logo = GUICtrlCreatePic("pic\logo.bmp", 24, 24, 224, 36)
Local $level_button = GUICtrlCreatePic("pic\1.bmp", 300, 200, 184, 36)
Local $exit_button = GUICtrlCreatePic("pic\2.bmp", 300, 250, 172, 42)
Local $license_button=GUICtrlCreateButton("Licencja",8,475,60,20)
While $okno = 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
$okno=2
Case $exit_button
$onko=2
Case $level_button
$okno=3
Case $license_button
$okno=5
EndSwitch
WEnd
GUICtrlDelete($ver)
GUICtrlDelete($level_button)
GUICtrlDelete($exit_button)
GUICtrlDelete($logo)
GUICtrlDelete($svr)
GUICtrlDelete($license_button)
EndFunc
Func _licencja()
Local $licencja1 =GUICtrlCreateLabel("RIDDLELAB (v.1.0.0)",2,2)
Local $licencja2 =GUICtrlCreateLabel("Copyright (c) 2012, Silvarerum",2,25)
Local $licencja3 =GUICtrlCreateLabel("Wszystkie prawa zastrzeżone.",2,42)
Local $licencja4 =GUICtrlCreateLabel("Redystrybucja i używanie, czy to w formie kodu źródłowego, czy w formie kodu wykonawczego,",2,59)
Local $licencja5 =GUICtrlCreateLabel("są dozwolone pod warunkiem spełnienia poniższych warunków:",2,76)
Local $licencja6 =GUICtrlCreateLabel("1.Redystrybucja kodu źródłowego musi zawierać powyższą notę kopyrightową, niniejszą listę",15,99)
Local $licencja7 =GUICtrlCreateLabel("warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności.",22,116)
Local $licencja8 =GUICtrlCreateLabel("2.Redystrybucja kodu wykonawczego musi zawierać powyższą notę kopyrightową,",15,139)
Local $licencja9 =GUICtrlCreateLabel("niniejszą listę warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności",22,156)
Local $licencja10=GUICtrlCreateLabel("w dokumentacji i/lub w w innych materiałach dostarczanych wraz z kopią oprogramowania.",22,173)
Local $licencja11=GUICtrlCreateLabel("3.Ani nazwa Silvarerum, ani nazwa jej współpracowników nie mogą być użyte celem sygnowania",15,196)
Local $licencja12=GUICtrlCreateLabel("lub promowania produktów pochodzących od tego oprogramowania, bez szczególnego, wyrażonego",22,213)
Local $licencja13=GUICtrlCreateLabel("na piśmie ich zezwolenia.",22,230)
Local $licencja14=GUICtrlCreateLabel("To oprogramowanie jest dostarczone przez grupę Silvarerum “takim, jakie jest”. Każda, dorozumiana",2,253)
Local $licencja15=GUICtrlCreateLabel("lub bezpośrednio wyrażona gwarancja, nie wyłączając dorozumianej gwarancji przydatności",2,270)
Local $licencja16=GUICtrlCreateLabel("handlowej i przydatności do określonego zastosowania, jest wyłączona. W żadnym wypadku posiadacze",2,287)
Local $licencja17=GUICtrlCreateLabel("praw autorskich nie mogą być odpowiedzialni za jakiekolwiek bezpośrednie,pośrednie, incydentalne,",2,304)
Local $licencja18=GUICtrlCreateLabel("specjalne, uboczne i wtórne szkody (nie wyłączając obowiązku dostarczenia produktu zastępczego",2,321)
Local $licencja19=GUICtrlCreateLabel("lub serwisu, odpowiedzialności z tytułu utraty walorów użytkowych, utraty danych lub korzyści ",2,338)
Local $licencja20=GUICtrlCreateLabel("a także przerw w pracy przedsiębiorstwa) spowodowane w jakikolwiek sposób i na podstawie",2,355)
Local $licencja21=GUICtrlCreateLabel("istniejącej w torii odpowiedzialności kontraktowej, całkowitej lub deliktowej (wynikłej zarówno",2,372)
Local $licencja22=GUICtrlCreateLabel("z niedbalstwa jak innych postaci winy), powstałe w jakikolwiek sposób w wyniku używania lub mające",2,389)
Local $licencja23=GUICtrlCreateLabel("związek z używaniem oprogramowania, nawet jeśli o możliwości powstania takich szkód ostrzeżono.",2,406)
Local $licencja_back=GUICtrlCreateButton("Powrót",5,450)
While $okno =5
Switch GUIGetMsg()
case $GUI_EVENT_CLOSE
$okno = 2
case $licencja_back
$okno = 1
EndSwitch
WEnd
GUICtrlDelete($licencja1)
GUICtrlDelete($licencja2)
GUICtrlDelete($licencja3)
GUICtrlDelete($licencja4)
GUICtrlDelete($licencja5)
GUICtrlDelete($licencja6)
GUICtrlDelete($licencja7)
GUICtrlDelete($licencja8)
GUICtrlDelete($licencja9)
GUICtrlDelete($licencja10)
GUICtrlDelete($licencja11)
GUICtrlDelete($licencja12)
GUICtrlDelete($licencja13)
GUICtrlDelete($licencja14)
GUICtrlDelete($licencja15)
GUICtrlDelete($licencja16)
GUICtrlDelete($licencja17)
GUICtrlDelete($licencja18)
GUICtrlDelete($licencja19)
GUICtrlDelete($licencja20)
GUICtrlDelete($licencja21)
GUICtrlDelete($licencja22)
GUICtrlDelete($licencja23)
GUICtrlDelete($licencja_back)
EndFunc
func level()
$level_folder = Chr(0)
Local $logo = GUICtrlCreatePic("pic\logo.bmp", 24, 24, 224, 36)
Local $back_button = GUICtrlCreatePic("pic\back.bmp", 10, 450, 152, 32)
Local $start_button = GUICtrlCreatePic("pic\start.bmp", 110, 120, 92, 32)
Local $level_list = GUICtrlCreateList("", 300, 100, 170, 300, BitOR($LBS_NOTIFY,$WS_VSCROLL,$WS_BORDER), 0)
Local $level = _FileListToArray("levels\", "*", 2)
Local $level_count = GUICtrlCreateLabel("Załadowano " & $level[0] & " poziomów.", 300, 390, 200, 17)
$level = _ArrayToString($level, "|", 1)
GUICtrlSetData($level_list, $level)
Local $level_logo = GUICtrlCreatePic("pic\no_logo.bmp", 59, 159, 200, 200, BitOR($GUI_SS_DEFAULT_PIC,$SS_CENTERIMAGE,$WS_BORDER))
GUICtrlSetPos($level_logo, 60, 160)
While $okno = 3
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
$okno = 2
Case $back_button
$okno = 1
Case $start_button
If Asc(GUICtrlRead($level_list)) > 0 Then ;--- Jeżeli wybrano coś na liscie
 $okno = 4
 $level_folder = GUICtrlRead($level_list)
EndIf
EndSwitch
IF WinGetState($win) = number(1+2+4+8) Then
IF _IsPressed(01, $dll) = 1 Then ;--- MOUSE 1
If FileExists("levels\" & GUICtrlRead($level_list) & "\logo.bmp") = 1 Then
 GUICtrlSetImage($level_logo, "levels\" & GUICtrlRead($level_list) & "\logo.bmp")
Else
 GUICtrlSetImage($level_logo, "pic\no_logo.bmp")
EndIf
EndIf
IF _IsPressed(26, $dll) = 1 Then ;--- UP
If FileExists("levels\" & GUICtrlRead($level_list) & "\logo.bmp") = 1 Then
 GUICtrlSetImage($level_logo, "levels\" & GUICtrlRead($level_list) & "\logo.bmp")
Else
 GUICtrlSetImage($level_logo, "pic\no_logo.bmp")
EndIf
EndIf
IF _IsPressed(28, $dll) = 1 Then ;--- DOWN
If FileExists("levels\" & GUICtrlRead($level_list) & "\logo.bmp") = 1 Then
 GUICtrlSetImage($level_logo, "levels\" & GUICtrlRead($level_list) & "\logo.bmp")
Else
 GUICtrlSetImage($level_logo, "pic\no_logo.bmp")
EndIf
EndIf
IF _IsPressed(02, $dll) = 1 Then ;--- MOUSE 2
GUICtrlSetImage($level_logo, "pic\no_logo.bmp")
GUICtrlDelete($level_list)
$level_list = GUICtrlCreateList("", 300, 100, 170, 300, BitOR($LBS_NOTIFY,$WS_VSCROLL,$WS_BORDER), 0)
$level = _FileListToArray("levels\", "*", 2)
GUICtrlSetData($level_count, "Załadowano " & $level[0] & " poziomów.")
$level = _ArrayToString($level, "|", 1)
GUICtrlSetData($level_list, $level)
MouseClick("secondary",MouseGetPos(0),MouseGetPos(1),1,1)
EndIf
if _IsPressed("0D", $dll) = 1 Then
If Asc(GUICtrlRead($level_list)) > 0 Then ;--- Jeżeli wybrano coś na liscie
 $okno = 4
 $level_folder = GUICtrlRead($level_list)
EndIf
Endif
EndIf
Wend
GUICtrlDelete($back_button)
GUICtrlDelete($level_list)
GUICtrlDelete($start_button)
GUICtrlDelete($level_logo)
GUICtrlDelete($level_count)
GUICtrlDelete($logo)
EndFunc
Func load_map($level_folder, $level_size, $stage)
Local $i = 0, $o = 0
if $level_size = "error" Then
error(12,0)
EndIf
Local $level_map[$level_size][$level_size][3] ;-- level, [0] pozycje (dane), [1] identyfikatory grafik, [2] Typ bloku (Czy jest blokiem stałym)
Local $temp,$temp2[$level_size]
While $i < $level_size
if FileExists("levels\" & $level_folder & "\stage_" & $stage & ".map") Then
$temp = StringSplit(Filereadline("levels\" & $level_folder & "\stage_" & $stage & ".map" ,$i+1),",")
IF $temp[0] > $level_size Then
While $temp[0] > $level_size
 _ArrayDelete($temp, Ubound($temp)-1)
 $temp[0] = $temp[0]-1
WEnd
EndIf
IF $temp[0] < $level_size Then
While $temp[0] < $level_size
 _arrayadd($temp, 0)
 $temp[0] = $temp[0]+1
WEnd
EndIf
Else
error(2,$stage)
EndIf
While $o < $level_size
$level_map[$i][$o][0] = $temp[$o+1]
$o += 1
WEnd
$o = 0
$i += 1
WEnd
$i = 0
$o = 0
While $i < $level_size
While $o < $level_size
IF FileExists("levels\" & $level_folder & "\blocks\" & $level_map[$i][$o][0] & ".data") = 1 then ;-- Sprawdzanie typu bloku, jeżeli brak danych to 0
if IniRead("levels\" & $level_folder & "\blocks\" & $level_map[$i][$o][0] & ".data", "type", "solid", "0") = 1 Then
 $level_map[$i][$o][2] = 1
Else
 $level_map[$i][$o][2] = 0
EndIf
Else
if $level_map[$i][$o][0] = 0 Then
 ;-- Jeżeli blok jest 0 to nie szuka danych bloku
Else
 error(10,$level_map[$i][$o][0])
EndIf
EndIf
;-- Jedyny blok bez grafiki to 0
if $level_map[$i][$o][0] <> 0 then
if FileExists("levels\" & $level_folder & "\blocks\" & $level_map[$i][$o][0] & ".bmp") = 1 Then
 $level_map[$i][$o][1] = GUICtrlCreatePic("levels\" & $level_folder & "\blocks\" & $level_map[$i][$o][0] & ".bmp", $o*Floor($win_size_x/$level_size), $i*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
Endif
EndIf
$o += 1
WEnd
$o = 0
$i += 1
WEnd
return $level_map
EndFunc
Func clear_map($level_folder, $level_size, $level_map)
Local $i = 0
Local $o = 0
While $i < $level_size
While $o < $level_size
GUICtrlDelete($level_map[$i][$o][1])
$o += 1
WEnd
$o = 0
$i += 1
WEnd
$i = 0
$o = 0
EndFunc
Func game()
IF FileExists("levels\" & $level_folder & "\data.m") = 0 then error(3,0) ;---------------------------------------------
$level_stage = Iniread("levels\" & $level_folder & "\data.m", "levelinfo", "start_stage", "error") ;--Level Rozmiar
$level_name = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "name", "NoName") ;-- Level Nazwa
$level_autor = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "autor", "SomeBody") ;-- Level Autor
$level_size = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "size", "error") ;--Level Rozmiar
If $level_size = "error" Then
error(1,0)
EndIf
WinSetTitle($win, "", "RiddleLab - " & $level_name & " - " & $level_autor)
$level_map = load_map($level_folder, $level_size, $level_stage)
$player_x = Iniread("levels\" & $level_folder & "\data.m", "levelinfo", "start_posx", "0")
$player_y = Iniread("levels\" & $level_folder & "\data.m", "levelinfo", "start_posy", "0")
$player_id = GUICtrlCreatePic("levels\" & $level_folder & "\" & $player_graphic, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
Local $script_do = 1
$trigger = "level_start"
Global $value_table_max = Iniread("levels\" & $level_folder & "\data.m", "levelinfo", "max_values", "1000")
$value_table_max += 1
Global $value_table[$value_table_max]
$value_table_max -= 1
While $okno = 4
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
$okno = 2
EndSwitch
If $mouse_postion[0] <> Floor(MouseGetPos(0)/Floor($win_size_y/$level_size)) Then $script_do = 0
If $mouse_postion[1] <> Floor(MouseGetPos(1)/Floor($win_size_y/$level_size)) Then $script_do = 0
$mouse_postion = MouseGetPos()
$mouse_postion[0] = Floor($mouse_postion[0]/Floor($win_size_y/$level_size))
$mouse_postion[1] = Floor($mouse_postion[1]/Floor($win_size_y/$level_size))
IF WinGetState($win) = number(1+2+4+8) Then
IF _IsPressed(01, $dll) = 1 Then ;--- UP
$script_do = 1
$trigger = "mouse_left"
EndIf
IF _IsPressed(02, $dll) = 1 Then ;--- UP
$script_do = 1
$trigger = "mouse_right"
EndIf
IF _IsPressed(26, $dll) = 1 Then ;--- UP
If $player_y = 0 then error(13,0)
$player_y = up($player_id, $player_x, $player_y, $level_size, $level_map)
$script_do = 1
$trigger = "button_up"
EndIf
IF _IsPressed(28, $dll) = 1 Then ;--- DOWN
If $player_y = ($level_size-1) then error(13,0)
$player_y = down($player_id, $player_x, $player_y, $level_size, $level_map)
$script_do = 1
$trigger = "button_down"
EndIf
IF _IsPressed(25, $dll) = 1 Then ;--- LEFT
If $player_x = 0 then error(13,0)
$player_x = left($player_id, $player_x, $player_y, $level_size, $level_map)
$script_do = 1
$trigger = "button_left"
EndIf
IF _IsPressed(27, $dll) = 1 Then ;--- RIGHT
If $player_x = ($level_size-1) then error(13,0)
$player_x = right($player_id, $player_x, $player_y, $level_size, $level_map)
$script_do = 1
$trigger = "button_right"
EndIf
IF _IsPressed(20, $dll) = 1 Then ;--- SPACJA
MsgBox(0, $player_x & "-" & $player_y, $script_do)
$okno = 1
send("{Space UP}")
EndIf
EndIf
if $script_do = 1 then
;--Globalny Triggerowy
IF FileExists("levels\" & $level_folder & "\scripts\" & Iniread("levels\" & $level_folder & "\data.m", "all-scripts", $trigger, "0")) = 1 Then
script(1,Iniread("levels\" & $level_folder & "\data.m", "all-scripts", $trigger, "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
;--Lokalny Triggerowy
If FileExists("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, $trigger, "0")) = 1 Then
script(0,Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, $trigger, "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
;--Globalny Pozycyjny
IF FileExists("levels\" & $level_folder & "\scripts\" & Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "pos-" & $player_x & "-" & $player_y, "0")) = 1 Then
script(1,Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "pos-" & $player_x & "-" & $player_y, "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
;--Globalny Mysz
If (Stringleft($trigger,5) = "mouse")and(FileExists("levels\" & $level_folder & "\scripts\" & Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "mouse-" & $mouse_postion[0] & "-" & $mouse_postion[1], "0"))) = 1 Then
script(1,Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "mouse-" & $mouse_postion[0] & "-" & $mouse_postion[1], "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
$trigger = "none"
EndIf
;--Lokalny Pozycyjny
If FileExists("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "pos-" & $player_x & "-" & $player_y, "0")) = 1 Then
script(0,Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "pos-" & $player_x & "-" & $player_y, "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
;--Lokalny Mysz
If (Stringleft($trigger,5) = "mouse")and(FileExists("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "mouse-" & $mouse_postion[0] & "-" & $mouse_postion[1], "0"))) = 1 Then
script(0,Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "mouse-" & $mouse_postion[0] & "-" & $mouse_postion[1], "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
$trigger = "none"
EndIf
;--Globalny Blok
If FileExists("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "id-" & $level_map[$player_y][$player_x][0], "0")) = 1 Then
script(1,Iniread("levels\" & $level_folder & "\data.m", "all-scripts", "id-" & $level_map[$player_y][$player_x][0], "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
;--Lokalny Blok
If FileExists("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "id-" & $level_map[$player_y][$player_x][0], "0")) = 1 Then
script(0,Iniread("levels\" & $level_folder & "\data.m", "scripts-" & $level_stage, "id-" & $level_map[$player_y][$player_x][0], "0"), $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Endif
$script_do = 0
EndIf
WEnd
GUICtrlDelete($player_id)
clear_map($level_folder, $level_size, $level_map)
$i = 0
While $i < UBound($value_table)
$value_table[$i] = ""
$i += 1
WEnd
$level_name = ""
$level_stage = ""
$level_autor = ""
$level_size = ""
$level_map = ""
$player_x = ""
$player_y = ""
$player_id = ""
$trigger = ""
GUISetBkColor(0xFFFFFF)
EndFunc
Func up($player_id, $player_x, $player_y, $level_size, $level_map)
send("{UP UP}")
$player_y -= 1
If $level_map[$player_y][$player_x][2] = 1 then ;-- Sprawdzanie typu bloku na który się idzie
$player_y += 1
Endif
GUICtrlSetPos($player_id, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size))
return $player_y
EndFunc
Func down($player_id, $player_x, $player_y, $level_size, $level_map)
send("{DOWN UP}")
$player_y += 1
If $level_map[$player_y][$player_x][2] = 1 then ;-- Sprawdzanie typu bloku na który się idzie
$player_y -= 1
Endif
GUICtrlSetPos($player_id, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size))
return $player_y
EndFunc
Func left($player_id, $player_x, $player_y, $level_size, $level_map)
send("{LEFT UP}")
$player_x -= 1
If $level_map[$player_y][$player_x][2] = 1 then ;-- Sprawdzanie typu bloku na który się idzie
$player_x += 1
Endif
GUICtrlSetPos($player_id, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size))
return $player_x
EndFunc
Func right($player_id, $player_x, $player_y, $level_size, $level_map)
send("{RIGHT UP}")
$player_x += 1
If $level_map[$player_y][$player_x][2] = 1 then ;-- Sprawdzanie typu bloku na który się idzie
$player_x -= 1
Endif
GUICtrlSetPos($player_id, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size))
return $player_x
EndFunc
;FUNKCJE ZE STAREJ BIBLIOTEKI SCRIPT_READER
;=======================================================================================
Func script($type_of_script, $file, $trigger, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $value_table, $value_table_max, $level_stage, $mouse_postion)
Local $script_file
if $type_of_script = 1 then
;-- Skrypt Globalny
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $file, $script_file)
Elseif $type_of_script = 0 Then
;-- Skrypt Lokalny (dla mapy)
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $level_stage & "\" & $file, $script_file)
EndIf
Local $temp = StringRegExp(StringLower($script_file[1]),'(?-i)[#](.*?)(?-i)[#]',1)
if UBound($temp) <> 1 Then
error(11, "not_found")
EndIf
if $temp[0] = "button_all" Then
if stringleft($trigger, 7) = "button_" then
$temp[0] = "button_" & Stringright($trigger,StringLen($trigger)-7)
EndIf
EndIf
if $temp[0] = "mouse_all" Then
if stringleft($trigger, 6) = "mouse_" then
$temp[0] = "mouse_" & Stringright($trigger,StringLen($trigger)-6)
EndIf
EndIf
IF ($temp[0] = $trigger) or ($temp[0] = "all") Then
script_do($script_file, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
Else
error(11,$temp[0])
EndIf
EndFunc
Func script_do($script_file, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
Local $i = 2,$temp,$return,$temp2
While $i <= $script_file[0]
if StringLeft($script_file[$i], 1) = ">" Then
$i += 1
Else
$script_file[$i] = StringReplace($script_file[$i], "@LASTRETURN@", $return)
$script_file[$i] = StringReplace($script_file[$i], "@PLAYERY@", $player_y)
$script_file[$i] = StringReplace($script_file[$i], "@PLAYERX@", $player_x)
$script_file[$i] = StringReplace($script_file[$i], "@TIMEH@", @HOUR)
$script_file[$i] = StringReplace($script_file[$i], "@TIMEM@", @MIN)
$script_file[$i] = StringReplace($script_file[$i], "@TIMES@", @SEC)
$script_file[$i] = StringReplace($script_file[$i], "@DATAY@", @YEAR)
$script_file[$i] = StringReplace($script_file[$i], "@DATAM@", @MON)
$script_file[$i] = StringReplace($script_file[$i], "@DATAD@", @WDAY)
$script_file[$i] = StringReplace($script_file[$i], "@LVLAUTHOR@", $level_autor)
$script_file[$i] = StringReplace($script_file[$i], "@LVLNAME@", $level_name)
$script_file[$i] = StringReplace($script_file[$i], "@LVLSIZE@", $level_size)
$script_file[$i] = StringReplace($script_file[$i], "@TRIGGER@", $trigger)
$script_file[$i] = StringReplace($script_file[$i], "@STAGE@", $level_stage)
SetError(0)
$temp = StringRegExp($script_file[$i],'(?-i)@v(.*?)(?-i)@',1)
if UBound($temp) > 0 then
$temp2 = global_value_get($temp, $i)
$script_file[$i] = StringReplace($script_file[$i], "@v" & $temp[0] &"@", $temp2)
Endif
$temp = iscommand($script_file[$i],$i)
$temp2 = StringSplit($temp[2],",")
_ArrayDelete($temp2,0)
$return = call($temp[1],$temp2,$i)
If $temp[1] = "close" Then
$i = $script_file[0]+1
ElseIf $temp[1] = "quit" Then
$i = $script_file[0]+1
$okno = 3
ElseIf $temp[1] = "set_global_value" then
$value_table = $return
$return = 0
ElseIf $temp[1] = "goto" then
$return = _ArraySearch($script_file, "point[" & $return & "]")
if $return = -1 then
 error(7,"goto "&$i&". By wrócić do punktu, mussz go stworzyć!")
Else
 $i = $return
EndIf
EndIf
$i += 1
Endif
WEnd
EndFunc
func IsCommand($line,$line_number)
Local $temp,$temp1,$temp2[3]
Local $temp = StringSplit($line,"[")
if _ArraySearch($accepted_commands,StringLower($temp[1])) = -1 Then
error(4,$temp[1]&" "&$line_number)
Else
$temp1 = StringRegExp($line, '(?-i)[[](.*?)(?-i)[]]', 1)
IF UBound($temp1) = 1 Then
$temp2[0] = 1
$temp2[1] = $accepted_commands[_ArraySearch($accepted_commands,StringLower($temp[1]))]
$temp2[2] = $temp1[0]
$temp2[1] = StringReplace($temp2[1], "if", "if_true")
$temp2[1] = StringReplace($temp2[1], "script", "start_script")
return $temp2
Else
error(6,$line_number)
EndIf
EndIf
EndFunc
;KOMENDY (BYŁY W BIBLIOTECE)
;=========================================================
func msg($param,$line_number)
if UBound($param) < 2 Then error(8,"msg "&$line_number)
MsgBox(0+64+262144, $param[0], $param[1])
return 0
Endfunc
func ask($param,$line_number)
if UBound($param) < 2 Then error(8,"ask "&$line_number)
Local $return
$return = MsgBox(0+32+4+262144, $param[0], $param[1])
IF $return = 6 Then
return 1
Else
return 0
EndIf
Endfunc
func ask_advanced($param,$line_number)
if UBound($param) < 2 Then error(8,"ask "&$line_number)
return InputBox($param[0], $param[1], "")
Endfunc
func player_set_pos($param,$line_number)
if UBound($param) < 2 Then error(8,"player_set_pos "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
IF ($param[0] < $level_size) and ($param[1] < $level_size) Then
$player_x = $param[0]
$player_y = $param[1]
GUICtrlSetPos($player_id, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size))
Else
error(7,"player_set_pos "&$line_number&". Pozycje X lub Y nie są liczbami cąłkowitymi/dodatnimi!")
EndIf
return 0
EndFunc

func player_set_graphic($param,$line_number)
if UBound($param) <> 1 Then error(8,"player_set_graphic "&$line_number)
if FileExists("levels\" & $level_folder & "\" & $param[0]) = 1 Then
GUICtrlDelete($player_id)
GUICtrlCreatePic("levels\" & $level_folder & "\" & $param[0], $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
$player_graphic = $param[0]
Else
error(7,$line_number&". Nie znaleziono nowej grafiki dla gracza!")
Endif
return 1
EndFunc
func global_value_set($param,$line_number)
if UBound($param) < 2 Then error(8,"global_value_set "& $line_number)
$param[0] = Number($param[0])
if (($param[0] < $value_table_max) and (IsInt($param[0]))) Then
$value_table[$param[0]] = $param[1]
Else
error(7,"global_value_set "&$line_number&". Identyfikator wartości globalnej musi być liczbą całkowitą i dodatnią!")
EndIf
return $value_table
EndFunc
Func global_value_get($param,$line_number)
if UBound($param) < 1 Then error(8,"global_value_get "&$line_number)
$param[0] = Number($param[0])
if (($param[0] < $value_table_max) and (IsInt($param[0]))) Then
return $value_table[$param[0]]
Else
error(7,"global_value_get "&$line_number&". Identyfikator wartości globalnej musi być liczbą całkowitą i dodatnią!")
EndIf
EndFunc
Func global_value_search($param,$line_number)
if UBound($param) < 1 Then error(8,"global_value_search "&$line_number)
$temp = _ArraySearch($value_table, $param[0])
if $temp = -1 Then
return "none"
Else
return $temp
EndIf
EndFunc
Func screen_shoot($param,$line_number)
if UBound($param) < 1 Then error(8,"scree_shoot "&$line_number)
_ScreenCapture_Capture($param[0] & ".jpg", $win_pos_x, $win_pos_y, $win_size_x, $win_size_y)
EndFunc
Func player_teleport_to_map($param,$line_number)
if UBound($param) < 3 Then error(8,"teleport_to_map "&$line_number)
$param[0] = String($param[0])
$param[1] = Number($param[1])
$param[2] = Number($param[2])
Local $temp,$temp2
$temp = isint($param[1])+isint($param[2])
if $temp = 2 Then
if (($param[1] > -1)and($param[1] < $level_size)) Then
if (($param[2] > -1)and($param[2] < $level_size)) Then
If FileExists("levels\" & $level_folder & "\stage_" & $param[0] & ".map") = 1 Then
 clear_map($level_folder, $level_size, $level_map)
 $level_stage = $param[0]
 $level_name = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "name", "NoName") ;-- Level Nazwa
 $level_autor = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "autor", "SomeBody") ;-- Level Autor
 $level_size = Iniread("levels\" & $level_folder & "\data.m", "stage-" & $level_stage, "size", "error") ;--Level Rozmiar
 $level_map = load_map($level_folder, $level_size, $param[0])
 $player_x = $param[1]
 $player_y = $param[2]
 GUICtrlDelete($player_id)
 $player_id = GUICtrlCreatePic("levels\" & $level_folder & "\" & $player_graphic, $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
 return 0
Else
 error(7,"teleport_to_map "&$line_number&". Nie znaleziono pliku mapy!")
Endif
Else
error(7,"teleport_to_map "&$line_number&". Pozycja Y wykracza poza rozmiar mapy!")
EndIf
Else
error(7,"teleport_to_map "&$line_number&". Pozycja X wykracza poza rozmiar mapy!")
EndIf
Else
error(7,"teleport_to_map "&$line_number&". Pozycje X lub Y nie są liczbami całkowitymi!")
EndIf
EndFunc
func close()
return 0
EndFunc
func block_get_id($param,$line_number)
if UBound($param) < 2 Then error(8,"get_block_id "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isint($param[0])+isint($param[1])
if $temp = 2 then
if ($param[0] < $level_size) and ($param[1] < $level_size) Then
if ($param[0] > -1) and ($param[1] > -1) Then
return $level_map[$param[1]][$param[0]][0]
Else
error(7,"get_block_id "&$line_number&". Pozycja X/Y musi miescić się na mapie!")
EndIf
Else
error(7,"get_block_id "&$line_number&". Pozycja X/Y musi miescić się na mapie!")
Endif
Else
error(7,"get_block_id "&$line_number&". Pozycja X/Y musi być liczbą dodatnią/całkowitą!")
EndIf
EndFunc
func block_set_id($param,$line_number)
if UBound($param) < 3 Then error(8,"set_block_id "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isint($param[0])+isint($param[1])
if $temp = 2 then
if ($param[0] < $level_size) and ($param[1] < $level_size) Then
if ($param[0] > -1) and ($param[1] > -1) Then
$level_map[$param[1]][$param[0]][0] = $param[2]
IF FileExists("levels\" & $level_folder & "\blocks\" & $level_map[$param[1]][$param[0]][0] & ".data") = 1 then ;-- Sprawdzanie typu bloku, jeżeli brak danych to 0
 if IniRead("levels\" & $level_folder & "\blocks\" & $level_map[$param[1]][$param[0]][0] & ".data", "type", "solid", "0") = 1 Then
 $level_map[$param[1]][$param[0]][2] = 1
 Else
 $level_map[$param[1]][$param[0]][2] = 0
 EndIf
Else
 error(7,"set_block_id "&$line_number&". Blok nie ma pliku danych informacyjnych!")
EndIf
;-- Jedyny blok bez grafiki to 0
if $level_map[$param[1]][$param[0]][0] <> 0 then
 GUICtrlDelete($level_map[$param[1]][$param[0]][1])
 if FileExists("levels\" & $level_folder & "\blocks\" & $level_map[$param[1]][$param[0]][0] & ".bmp") = 1 Then
 $level_map[$param[1]][$param[0]][1] = GUICtrlCreatePic("levels\" & $level_folder & "\blocks\" & $level_map[$param[1]][$param[0]][0] & ".bmp", $param[0]*Floor($win_size_x/$level_size), $param[1]*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
 GUICtrlDelete($player_id)
 $player_id = GUICtrlCreatePic("levels\" & $level_folder & "\player.bmp", $player_x*Floor($win_size_x/$level_size), $player_y*Floor($win_size_y/$level_size), Floor($win_size_x/$level_size), Floor($win_size_y/$level_size))
 Endif
EndIf
Else
error(7,"set_block_id "&$line_number&". Pozycja X/Y musi miescić się na mapie!")
EndIf
Else
error(7,"set_block_id "&$line_number&". Pozycja X/Y musi miescić się na mapie!")
Endif
Else
error(7,"set_block_id "&$line_number&". Pozycja X/Y musi być liczbą dodatnią/całkowitą!")
EndIf
EndFunc
func math_random($param,$line_number)
if UBound($param) < 2 Then error(8,"math_random "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isint($param[0])+isint($param[1])
if $temp = 2 Then
return random($param[0],$param[1],1)
Else
error(7,"math_random "&$line_number&". Liczby od/do muszą być liczbami całkowitymi!")
EndIf
EndFunc
func math_add($param,$line_number)
if UBound($param) < 2 Then error(8,"math_add "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isnumber($param[0])+isnumber($param[1])
if $temp = 2 Then
return $param[0]+$param[1]
Else
error(7,"math_add "&$line_number&". Paramtery muszą być liczbami!")
EndIf
EndFunc
func math_subtract($param,$line_number)
if UBound($param) < 2 Then error(8,"math_subtract "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isnumber($param[0])+isnumber($param[1])
if $temp = 2 Then
return $param[0]-$param[1]
Else
error(7,"math_subtract "&$line_number&". Paramtery muszą być liczbami!")
EndIf
EndFunc
func math_multiply($param,$line_number)
if UBound($param) < 2 Then error(8,"math_multiply "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
Local $temp = isnumber($param[0])+isnumber($param[1])
if $temp = 2 Then
return $param[0]*$param[1]
Else
error(7,"math_multiply "&$line_number&". Paramtery muszą być liczbami!")
EndIf
EndFunc
func math_divide($param,$line_number)
if UBound($param) < 2 Then error(8,"math_divide "&$line_number)
$param[0] = Number($param[0])
$param[1] = Number($param[1])
if $param[1] = 0 Then error(7,"math_divide "&$line_number&". Nie wiesz cholero? Nie dziel przez zero!")
Local $temp = isnumber($param[0])+isnumber($param[1])
if $temp = 2 Then
return $param[0]/$param[1]
Else
error(7,"math_divide "&$line_number&". Paramtery muszą być liczbami!")
EndIf
EndFunc
func math_floor($param,$line_number)
if UBound($param) < 1 Then error(8,"math_floor "&$line_number)
$param[0] = Number($param[0])
if isnumber($param[0]) = 1 Then
return Floor($param[0])
Else
error(7,"math_floor "&$line_number&". Parametr musi być liczbą!")
EndIf
EndFunc
func math_ceiling($param,$line_number)
if UBound($param) < 1 Then error(8,"math_ceiling "&$line_number)
$param[0] = Number($param[0])
if isnumber($param[0]) = 1 Then
return Ceiling($param[0])
Else
error(7,"math_ceiling "&$line_number&". Parametr musi być liczbą!")
EndIf
EndFunc
func math_pow($param,$line_number)
if UBound($param) < 2 Then error(8,"math_pow "&$line_number)
$param[0] = Number($param[0])
Local $temp = isnumber($param[0])+isnumber($param[1])
if $temp = 2 Then
return $param[0]^$param[1]
Else
error(7,"math_divide "&$line_number&". Paramtery muszą być liczbami!")
EndIf
EndFunc
func math_sqrt($param,$line_number)
if UBound($param) < 1 Then error(8,"math_sqrt "&$line_number)
$param[0] = Number($param[0])
if isnumber($param[0]) = 1 Then
if $param[0] > 0 Then
return Sqrt($param[0])
Else
error(7,"math_sqrt "&$line_number&". Parametr musi być liczbą dodatnią!")
EndIf
Else
error(7,"math_sqrt "&$line_number&". Parametr musi być liczbą!")
EndIf
EndFunc
func math_even($param,$line_number)
if UBound($param) < 1 Then error(8,"math_even "&$line_number)
$param[0] = Number($param[0])
if isnumber($param[0]) = 1 Then
If mod($param[0], 2) = 0 Then
return 1
Else
return 0
EndIf
Else
error(7,"math_even "&$line_number&". Parametr musi być liczbą!")
EndIf
EndFunc
func string_upper($param,$line_number)
if UBound($param) < 1 Then error(8,"string_upper "&$line_number)
return StringUpper(String($param[0]))
EndFunc
func string_lower($param,$line_number)
if UBound($param) < 1 Then error(8,"string_lower "&$line_number)
return Stringlower(String($param[0]))
EndFunc
func string_lenght($param,$line_number)
if UBound($param) < 1 Then error(8,"string_lenght "&$line_number)
return StringLen(String($param[0]))
EndFunc
func string_left($param,$line_number)
if UBound($param) < 2 Then error(8,"string_left "&$line_number)
if IsInt($param[1]) = 1 Then
return StringLeft(String($param[0]),$param[1])
Else
error(7,"string_left "&$line_number&". Drugi parametr musi być liczbą!")
EndIf
EndFunc
func string_right($param,$line_number)
if UBound($param) < 2 Then error(8,"string_right "&$line_number)
if IsInt($param[1]) = 1 Then
return StringRight(String($param[0]),$param[1])
Else
error(7,"string_right "&$line_number&"Drugi parametr musi być liczbą!")
EndIf
EndFunc
func string_reverse($param,$line_number)
if UBound($param) < 1 Then error(8,"string_reverse "&$line_number)
return _StringReverse($param[0])
EndFunc
func goto($param,$line_number)
if UBound($param) <> 1 Then error(8,"goto "&$line_number)
return $param[0]
EndFunc
func point($param,$line_number)
if UBound($param) <> 1 Then error(8,"point "&$line_number)
return 0
EndFunc
func if_true($param,$line_number)
if UBound($param) <> 2 Then error(8,"if_true "&$line_number)
if (StringInStr($param[0], "=<")) or (StringInStr($param[0], "=>")) then error(7,"if_true "&$line_number&". Złe elementy porównania!")
$temp = StringInStr($param[0], ">=")
if $temp = 0 then
Else
$temp = StringSplit($param[0], ">=")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] >= $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
EndIf
$temp = StringInStr($param[0], "<=")
if $temp = 0 then
Else
$temp = StringSplit($param[0], "<=")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] <= $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
EndIf
$temp = StringInStr($param[0], "<>")
if $temp = 0 then
Else
$temp = StringSplit($param[0], "<>")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] <> $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
EndIf
$temp = StringInStr($param[0], "=")
if $temp = 0 then
Else
$temp = StringSplit($param[0], "=")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] = $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
EndIf
$temp = StringInStr($param[0], "<")
if $temp = 0 then
Else
$temp = StringSplit($param[0], "<")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] < $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
return 1
EndIf
$temp = StringInStr($param[0], ">")
if $temp = 0 then
Else
$temp = StringSplit($param[0], ">")
if $temp[0] <> 2 then error(7,"if_true "&$line_number&". Do porównania są potrzebne tylko 2 elementy!")
if $temp[1] > $temp[2] Then
if FileExists("levels\" & $level_folder & "\scripts\" & $param[1]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[1], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
Else
return 0
EndIf
return 1
EndIf
return -1
EndFunc
func start_script($param, $line_number)
if UBound($param) <> 1 Then error(8,"script "&$line_number)
Local $temp
if FileExists("levels\" & $level_folder & "\scripts\" & $param[0]) = 1 Then
_FileReadToArray("levels\" & $level_folder & "\scripts\" & $param[0], $temp)
script_do($temp, $player_x, $player_y, $player_id, $level_size, $level_map, $level_autor, $level_name, $trigger, $value_table, $value_table_max, $level_stage, $mouse_postion)
return 1
Else
error(7,"if_true "&$line_number&". Nie znaleziono pliku skryptu do wykonania!")
EndIf
EndFunc

 

 

W przyszłych wersjach planuję dodać generator poziomów, poprawić grafikę w menu i dać możliwość zamieszczania własnego "loga" w main menu (w przypadku gdyby ktoś zrobił coś w rodzaju fabuły mógłby wstawić własne logo pokazujące kto jest autorem gry).

Silnik udostępniam na zasadach licencji BSD, więc możecie go właściwie nawet przerobić na sterowanie do elektrowni atomowej :D

 

@EDIT

Obawiam się, że na razie nie będę rozwijał tego silnika, ponieważ jestem zajęty dużo większym projektem w C++, ale gdyby ktoś chciał to zrobić to nic nie stoi na przeszkodzie :)

-----------------------------

Download:

http://rapidshare.co...1/RiddleLab.zip

 

Mirror:

http://speedy.sh/KnrTw/RiddleLab.zip

 

Scan:

https://www.virustot...sis/1357126384/

userbar.png
Opublikowano

Nooo, Props. Zaraz sprawdzimy do czego to jest zdolne :)

 

#EDIT

Za chuj nie mogę się w tym odnaleźć :P Jakiś poradnik do dodawania poziomów by się przydał i ogólny zbiór standardów do tworzenia skryptów jak i map :P

Ale nie wymagam tego bo widzę że kod jest dosyć długi i pisanie czegoś takiego trochę by trwało.

Opublikowano

Pisaliśmy z kolegą osobno, właściwie kiedy dostałem kod to nie za bardzo wiedziałem jakim cudem udało mu się to skompilować bo np. nie były podeklarowane zmienne globalne :D On wtedy dopiero zaczynał, dzisiaj jest dużo lepszy w te klocki. Kod też sam musiałem ogarnąć, trochę to zajęło :D W końcu połączyłem 2 pliki - bibliotekę do wczytywania skryptów i plik main, bo inaczej się nie dało - "biblioteka" odwoływała się na przykład do konsoli błędów, która była w pliku main. Postaram się napisać poradnik, ale trochę to może potrwać ;P

userbar.png
Opublikowano

Całkiem fajne, mam zamiar napisać silnik do gier na jave, jak znajdę czas to zacznę ;p

//gif w sygnie

Opublikowano

Powiem tak.

Wszystko ładnie.

Ale dwie uwagi.

Po pierwsze, nie podoba mi się to:

GUICtrlDelete($licencja1)
GUICtrlDelete($licencja2)
GUICtrlDelete($licencja3)
GUICtrlDelete($licencja4)
GUICtrlDelete($licencja5)
GUICtrlDelete($licencja6)
GUICtrlDelete($licencja7)
GUICtrlDelete($licencja8)
GUICtrlDelete($licencja9)
GUICtrlDelete($licencja10)
GUICtrlDelete($licencja11)
GUICtrlDelete($licencja12)
GUICtrlDelete($licencja13)
GUICtrlDelete($licencja14)
GUICtrlDelete($licencja15)
GUICtrlDelete($licencja16)
GUICtrlDelete($licencja17)
GUICtrlDelete($licencja18)
GUICtrlDelete($licencja19)
GUICtrlDelete($licencja20)
GUICtrlDelete($licencja21)
GUICtrlDelete($licencja22)
GUICtrlDelete($licencja23)
GUICtrlDelete($licencja_back)

Zróbcie to na tablicach i z bani :D

 

Po drugie, przejedźcie kod Tidy i będzie ogólnie nieźle :]

846331404756772371599.jpeg
Opublikowano

@up

Kombinowałem jak to zrobić i nic nie przyszło mi do głowy, dopiero zauważyłem, że mogę to zrobić tablicami i pętlą for -_- Ale dzięki :D

userbar.png
Opublikowano
Opublikowano

Copyright (c) 2012, Silvarerum
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1.Redistributions of source code must retain the above copyright notice,
	 this list of conditions and the following disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice,
	 this list of conditions and the following disclaimer in the documentation and/or other materials
	 provided with the distribution.
3.Neither the name of the Silvarerum nor the names of its contributors may be used to endorse
	 or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE SILVARERUM TEAM "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Znalazłem to na początku kodu.

Opublikowano

Nope, raczej bym nie wstawił kodu z nazwą grupy na początku, nie jestem aż takim idiotą xD Silvarerum to nazwa grupy, którą założyliśmy z kilkoma kolegami, zajmujemy się programowaniem, a teraz też staramy się nakręcić machinimę. Więc nie, to nie plagiat :D Zresztą w pliku CzytajTo są nazwiska moje i kolegi, porównajcie sobie imię i nazwisko z moim nickiem :D

userbar.png
Opublikowano

Trololo, ten tekscik to licencja BSD, można ją znaleźć wszędzie w necie, zresztą napisałem na początku :D Dałem ją do kodu bo wolę ją od GNU, daje większą swobodę działania tym, którzy chcieliby przetworzyć kod, a jednocześnie każda reprodukcja lub produkt zawierający fragment tego kodu musi też być udostępniony na zasadach tej licencji :) Wolne oprogramowanie :)

Licencja typu BSD skupia się na prawach użytkownika. Jest bardzo liberalna, zezwala nie tylko na modyfikacje kodu i jego rozprowadzanie w takiej postaci, ale także na rozprowadzanie produktu bez postaci źródłowej czy wręcz włączenia do zamkniętego oprogramowania , pod warunkiem załączenia do produktu informacji o autorach oryginalnego kodu i treści licencji.

 

@EDIT

Tak przy okazji to zaczynam dodawać nowe skrypty i polepszać menu, może też dodam przezroczystość. Potem postaram się dodać jakiś poradnik albo chociaż krótką grę z tutorialem.

userbar.png
Opublikowano

Chciałbym ci powiedzieć, że każdy może zwyczajnie zrobić Ctrl+C i Ctrl+V a ty nawet nie będziesz miał o tym pojęcia...

 

I wogóle nie lepiej użyć Irrlichta?

Opublikowano

@UP

Jeśli chodzi o silnik graficzny to na pewno jest lepszy, ten robiliśmy po to, żebym w ogóle obczaił budowę silników itp. RiddleLab jest całkowicie treningowy, choć chcę go rozwinąć. Co do copy, paste to wiem, ale jako że jestem fanem open source to wolałem zamieścić tę notkę, może ktoś się wykaże uczciwością ;P Oczywiście nie dodaję licencji do kilkudziesięciolinijkowych programów.

userbar.png
Opublikowano

Planuję zrobić coś w rodzaju loga gry, kampanii czy czegoś takiego wyświetlane w main menu. Będzie można dodać plik własnego loga. Oprócz tego możliwość odblokowywania poziomów po kolei i większej interakcji z otoczeniem. No i by się przydało zmiana grafiki gracza przy zmianie kierunku poruszania.

 

I małe pytanie: zna ktoś biblioteki pozwalające na używanie plików .png? Bo przydałaby mi się przezroczystość.

userbar.png
Opublikowano

Dzięki, myślałem, że będę musiał pobierać itp. Co do poprawiania silnika to zrobię chyba tylko postać gracza tak, żeby prześwitywało tło spod niej, bo do robienia kilkuwarstwowych ścian musiałbym przerobić system generowania map, a to zupełnie niepotrzebne. Mogę dodać skrypt do dodawania grafik w png na jakiejś ścianie, ale wydaje mi się, że lepiej będzie po prostu zmienić grafikę bloczka niż dodawać kolejną warstwę, różnicy nie będzie widać :P

userbar.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...