SzukajSzukaj  RegulaminRegulamin  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki RejestracjaRejestracja  ZalogujZaloguj
Forum Icy.pl Strona Główna  

Poprzedni temat «» Następny temat
RPG MAKER
Autor Wiadomość
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 25 Styczeń 2008, 09:41   RPG MAKER

Zrobić własną grę jest bardzo ciężko. Trzeba znać różne języki programowania. Bez nich nigdy nie zrobisz wielkiej gry. Za szczęście z pomocą przychodzą firmy tworzące oprogramowanie pozwalające na robienie gier bez znajomości języków programowania. One mogą nam pomóc, ale z poradami mogą nam przyjść tylko ci, którzy już coś zrobili w ich programie. Autorzy programu RPG Maker dali niewiele RTP do programu, jednak to, co dali, do naszej pierwszej gry świetnie się nada. Najnowsza (w tej chwili) wersja to XP. Oryginalny program pozwala na poruszanie sie w grze za pomocą klawiatury lub USB PADa, symulator na używanie myszy. Ja osobiście wolę oryginalny, gdyż wcześniej grałem w gry na NESa. A co wy możecie powiedzieć o RPG Makerze?
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
Ostatnio zmieniony przez FOX 26 Luty 2008, 10:13, w całości zmieniany 1 raz  
 
 
     
Devlin 
Splendid!



Wiek: 28
Dołączył: 26 Mar 2006
Posty: 799
Skąd: Icy Tower Planet
Wysłany: 25 Styczeń 2008, 14:05   

Daj jakiś link na początek ;) (Lenistwo...)
_________________
Cytat:



 
  Profil FLD: 1565
     
mattirab 
Moderator



Pomógł: 2 razy
Wiek: 24
Dołączył: 24 Maj 2005
Posty: 1200
Skąd: Kalisz
Wysłany: 25 Styczeń 2008, 16:19   

www.rpgmaker.pl ;) .
Robię grę w RPGM2000. Od jakiegoś miesiąca - eventy umiem zrobić i te inne podstawy. Ostatnio z lenistwa mi się odechciało, chociaż myślę, że do tego wrócę. Na razie tą fazę oznajmiłbym jako drugą betę - gra powoli przechodzi do decydującej fazy rozgrywki, chociaż ten wstęp to tylko jakieś 10 minut do przejścia by było ;) . Niestety ma parę błędów (za trudni przeciwnicy do pokonania, chyba jeden switch źle zrobiony), ale jestem z niej "dumny" ;-) .
_________________
Hello me, it's me again.
Rekordy
Historia Icy Tower
Nasze Powtórki
 
  Profil FLD: 3803
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 27 Styczeń 2008, 14:29   

Na stronie Twierdzy RPG Makera (www.rpgmaker.pl, jak podał mattirab) można też pobrać RPG Makera XP. Ale przed jego uruchomieniem warto zainstalować RGSS-RTP, która z jakichś przyczyn może nie zainstalować sie razem z programem. Warto zatem mieć konto z uprawnieniami administratora, ale, jeśli go nie masz, użyj SAMinside, żeby poznać hasło.

Jeszcze w tamtym roku zacząłem pracę nad "Potężne Raichu - ECO-FORCE", której fabuła pokrywa się z grą "Stracone Dusze". Celem gracza jest przeprowadzić drużynę Rainmana przez szereg trudnych misji, w których albo wystarczy pokonać Bossa i opuścić ostatnią mapę misji, albo trzeba również coś jeszcze zrobić, żeby móc opuścić finałową mapę. Wszyscy bohaterowie posiadają tylko techniki, ale jest jeden, który ma również umiejętności, tyle, że nie bodzi przeciwnika.

Jedną z najbardziej przydatnych technik jest "Headstand Kick" Harolda von Lost Souls (w grze po prostu Harold). Tyle, ze on przy tej technice traci niemało energii, więc radzę przed użyciem umiejętności "Headstand Kick" upewnić się, że strata energii wywołana przez tą technikę wyniesie w przeliczeniu na jednego wroga mniej niż najmniej energochłonna technika bohatera zużywająca więcej energii niż 0. Głupie marnowanie energii oznacza przegraną. Przeciwnicy na początku są bardzo słabi, a grupy są czyste, jednak już w misji ROCKIN numer 4 (w tej chwili ostatniej, którą ukończyłem) pojawiają sie mieszane grupy przeciwników. Na mapach mających mieszane grupy wrogów maksymalna liczba przeciwników w grupie wynosi 4. Na mapach mających czyste grupy przeciwników liczba wrogów w grupie wynosi stale 8.
Aby móc wybrać późniejszą misję, trzeba najpierw ukończyć wcześniejszą. Jeśli uciekniesz z walki, stracisz możliwość zdobycia XP, które bardzo sie przydaje w grze. Do tego początkowa broń to badziewie, którym mało którego wroga można załatwić, jednak po ukończeniu dalszych misji dostępne uzbrojenie będzie coraz lepsze.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
Devlin 
Splendid!



Wiek: 28
Dołączył: 26 Mar 2006
Posty: 799
Skąd: Icy Tower Planet
Wysłany: 30 Styczeń 2008, 22:05   

Daj kiedyś link do jakiejś wersji alfa ;)
_________________
Cytat:



 
  Profil FLD: 1565
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 1 Luty 2008, 10:30   Wersje gry.

Przykro mi, Devlin, ale w wersje testowe gier, które robię, gram tylko ja. Pozostali mogą tylko w końcowe, a co do tych, nie mam pewności, kiedy je wydam. Musisz uzbroić się w cierpliwość. Ale już teraz dostaniesz screeny z gry.

SP100.png
Pasek energii (pełny)
Plik ściągnięto 9579 raz(y) 974 Bajtów

Life000.png
Pasek życia (pusty)
Plik ściągnięto 9579 raz(y) 968 Bajtów

Screen2.png
A oto screen z gry przykładowej, która posiada możliwość powiększania drużyny do sześciu postaci. Oryginalna gra mojego autorstwa może już niedługo pojawić się na www.rpgmaker.pl. Grę zrobiłem w RPG Makerze XP.
Paleta oryginału 3 bajty, wrzucone 1.
Plik ściągnięto 150 raz(y) 125,01 KB

screenshot01.png
Mapa
1 - pasek życia
2 - pasek energii
3 - bohater
Plik ściągnięto 150 raz(y) 102,44 KB

screenshot00.png
To jest menu główne gry
Plik ściągnięto 149 raz(y) 16,22 KB

_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
Gościu 
That's great!



Wiek: 32
Dołączył: 05 Lut 2008
Posty: 35
Skąd: Mikolajki/Polska
Wysłany: 9 Luty 2008, 19:02   

wow ale super!

edit: a jak się nazywa ta gra?
_________________
Po góry, po Filipiny,
Byly raz sobie dwie gminy.
Jedna Mikolajek, jedna Polski
W Mikolajkach jest basen morski!
Tam jest super hotel Golebieski,
nie widac tam rysy kreski!

www.icytowerek.i-fora.info

A to poniżej to mój download

http://icytowerek.i-fora.info/dload.php
Ostatnio zmieniony przez Gościu 9 Luty 2008, 19:32, w całości zmieniany 1 raz  
 
 
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 12 Luty 2008, 11:09   

Naprawdę ci się należy politowanie, Gościu. Tytuł gry podałem na początku postu, który był przed tym z obrazkami.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
Devlin 
Splendid!



Wiek: 28
Dołączył: 26 Mar 2006
Posty: 799
Skąd: Icy Tower Planet
Wysłany: 14 Marzec 2008, 21:30   

Gdy już będziesz miał wersję końcową gry to ma się ona jak najszybciej znaleźć na mojej poczcie ;) (devlinus@wp.pl) Oczywiście o ile to możliwe ;)
Niesamowite jak można samemu robić takie gry. Ja nawet dobrego moda do IT nie umiem zrobić a tu prawie jak World of Warcraft ;)
_________________
Cytat:



 
  Profil FLD: 1565
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 22 Marzec 2008, 10:39   

Gra nawiązuje do gry "Earth 2150: Lost Souls", tyle, że jej akcja dzieje się dzisiaj. Początek nie zapowiada się wesoło. Już po rozpoczęciu gry gracz musi od razu pokonać dwóch bossów w jednej walce. Dobra wiadomość jest taka, że są oni równie mocni jak bohater. Zła natomiast jest taka, że bohater nie ma żadnej broni. A do tego przeciwnicy atakują albo nie. Po pokonaniu bossa i przejściu mapy do jednego miejsca, gracz znajdzie się w bazie i tam będzie musiał wziąć sobie broń. Początkowo uzbrojenie dostępne w bazie jest badziewne i tanie. Lepsza broń jest drożsża, ale dostępna dopiero po ukończeniu misji, do której gracz się właśnie w bazie przygotuje.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
Gibek 
Yo!

Dołączył: 20 Lut 2008
Posty: 2
Skąd: Zakopane
Wysłany: 30 Marzec 2008, 19:36   

Pytanie: Czy już skończyłeś swój projekt? Jak tak, gierkę wyślij mi na kazmail@o2.pl pliska, mi już się spodobała po obrazkach
_________________
To jest podpis
 
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 6 Kwiecień 2008, 15:50   

Akurat w tej chwili pracuję również nad innymi projektami. Jednym z nich jest "Miasteczko Nowoczesne". Gra nawiązuje do pierwszej części "Green Levithan", ale cała rozgrywka to ponad 45 minut gry. Sonic i Tails przypadkowo znaleźli sie w świecie RPG Makera. Celem gracza jest pomóc im sie stamtąd wydostać. Gracz na samym początku ma w drużynie tylko Sonica. Pozostałych, czyli Tailsa, Yume i innych zbierze w trakcie gry. Na bezludnej wyspie już czeka go spotkanie z Tailsem. On i Sonic wspólnie szukają drogi powrotu do swojego świata. W grze pomagają im Yume (wchodzi do drużyny po tym, jak Sonic i Tails wejdą do jednego z pokojów w ratuszu, gdzie czeka ich rozmowa z osobą, którą znaleźli w barze, ale oni muszą do niej wstąpić i z nią porozmawiać), Seiya (dołącza jako czwarty, standardowo ostatni członek drużyny) próbujący pójść w moje ślady i zrobić grę RPG, w której jest system profili, markos22 (swoją drogą mój brat, dochodzi jako piąty do drużyny dzięki temu, że zmieniłem w grze miejsce na piątego w drużynie), który zgodnie z grą już jest po służbie wojskowej, i Mateusz SSJ8 (czyli ja, dołączam do drużyny w miejsce Seiyi, który zaraz po walce z Lucyferowem wrócił do domu, żeby dalej pracować nad tym, co nie udało mu się jeszcze osiągnąć, a co ja już dawno osiągnąłem). Po walce z demonicznymi bałwanami, przed którą przyłączam sie do drużyny Sonica, następnym celem gracza jest znalezienie i pokonanie Rubeusa z Sailor Moon Forever (w grze jest wzmianka o ruinach tego forum), jednak w pierwszej kolejności trzeba pozbyć sie demonicznego bałwana z Winter Slum City i jeszcze zapobiec pojawieniu sie tam kolejnych bałwanów. Wszystkie te przygody prowadza do kryjówki Rubeusa, po porażce którego Sonic i Tails wracają do domu tak, jakby to, co przeżyli w grze, było tylko ich wspólnym snem.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 18 Kwiecień 2008, 11:14   "Miasteczko Nowoczesne"

Gra "Miasteczko Nowoczesne" jest już skończona, ale brakuje jeszcze instrukcji. Wersję ostateczną, która jest już prawie zrobiona, można będzie ściągnąć ze strony http://modern.i-fora.info z z mojego forum. A tymczasem może ktoś chce ją już teraz? Tylko uwaga, bo to waży prawie 8 MB i jest robione w RPG Makerze XP.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
Ostatnio zmieniony przez FOX 20 Kwiecień 2008, 09:39, w całości zmieniany 1 raz  
 
 
     
Ingen
Yo!

Dołączył: 19 Kwi 2008
Posty: 3
Wysłany: 19 Kwiecień 2008, 15:26   

RPG może fajny program, nigdy nim nie tworzyłem gry, tworzę natomiast Game makerem )
www.gmclan.org
 
     
FOX 
Wow!



Wiek: 30
Dołączył: 06 Gru 2006
Posty: 83
Skąd: OZHAXALD
Wysłany: 20 Kwiecień 2008, 10:09   

Może czas już spróbować? Polecam XP. Do ambitniejszych prac trzeba umieć Ruby, ale i bez tego można stworzyć swoją pierwszą grę, gdyż można się z czasem biernie nauczyć tych skryptów.

A oto mojej roboty skrypt na profile.

Cytat:


#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
#  各クラスの定義が終わった後、ここから実際の処理が始まります。
#==============================================================================

begin

# This variable determines the default font type
$defaultfonttype = "Times New Roman"
# This variable determines the default font size
$defaultfontsize = 26

# トランジション準備
Graphics.freeze
# シーンオブジェクト (タイトル画面) を作成
$scene = Scene_ProfileOption.new
# $scene が有効な限り main メソッドを呼び出す
while $scene != nil
$scene.main
end
# フェードアウト
Graphics.transition(20)
rescue Errno::ENOENT
# 例外 Errno::ENOENT を補足
# ファイルがオープンできなかった場合、メッセージを表示して終了する
filename = $!.message.sub("Plik lub ścieżka nie istnieje ", "")
print("Brakuje pliku: #{filename} ")
end

#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
#  タイトル画面の処理を行うクラスです。
#==============================================================================

class Scene_ProfileOption
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# 戦闘テストの場合
if $BTEST
battle_test
return
end
# データベースをロード
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# システムオブジェクトを作成
$game_system = Game_System.new
# タイトルグラフィックを作成
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# コマンドウィンドウを作成
s1 = "Nowy"
s2 = "Wczytaj"
s3 = "Koniec"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# コンティニュー有効判定
# セーブファイルがひとつでも存在するかどうかを調べる
# 有効なら @continue_enabled を true、無効なら false にする
@profile_enabled = false
for i in 0..3
if FileTest.exist?("Players/Player#{i+1}.pro")
@profile_enabled = true
end
end
# コンティニューが有効な場合、カーソルをコンティニューに合わせる
# 無効な場合、コンティニューの文字をグレー表示にする
if @profile_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# タイトル BGM を演奏
$game_system.bgm_play($data_system.title_bgm)
# ME、BGS の演奏を停止
Audio.me_stop
Audio.bgs_stop
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# コマンドウィンドウを解放
@command_window.dispose
# タイトルグラフィックを解放
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# コマンドウィンドウを更新
@command_window.update
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 0 # ニューゲーム
command_new_player
when 1 # コンティニュー
command_load_player
when 2 # シャットダウン
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# ● コマンド : ニューゲーム
#--------------------------------------------------------------------------
def command_new_player
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# BGM を停止
Audio.bgm_stop
# プレイ時間計測用のフレームカウントをリセット
Graphics.frame_count = 0
# 各種ゲームオブジェクトを作成
# マップ画面に切り替え
$scene = Scene_PlayerName.new
end
#--------------------------------------------------------------------------
# ● コマンド : コンティニュー
#--------------------------------------------------------------------------
def command_load_player
# コンティニューが無効の場合
unless @profile_enabled
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ロード画面に切り替え
$scene = Scene_LoadPlayer.new
end
#--------------------------------------------------------------------------
# ● コマンド : シャットダウン
#--------------------------------------------------------------------------
def command_shutdown
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# BGM、BGS、ME をフェードアウト
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# シャットダウン
$scene = nil
end

def command_delete_player
unless @profile_enabled
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ロード画面に切り替え
$scene = Scene_DeletePlayer.new
end
#--------------------------------------------------------------------------
# ● 戦闘テスト
#--------------------------------------------------------------------------
def battle_test
# データベース (戦闘テスト用) をロード
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# プレイ時間計測用のフレームカウントをリセット
Graphics.frame_count = 0
# 各種ゲームオブジェクトを作成
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 戦闘テスト用のパーティをセットアップ
$game_party.setup_battle_test_members
# トループ ID、逃走可能フラグ、バトルバックを設定
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# バトル開始 SE を演奏
$game_system.se_play($data_system.battle_start_se)
# バトル BGM を演奏
$game_system.bgm_play($game_system.battle_bgm)
# バトル画面に切り替え
$scene = Scene_Battle.new
end
end

#==============================================================================
# ■ Scene_Name
#------------------------------------------------------------------------------
#  名前入力画面の処理を行うクラスです。
#==============================================================================

class Scene_PlayerName
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# アクターを取得
$player_name = ""
# ウィンドウを作成
@edit_window = Window_PlayerEdit.new($player_name, 16)
@input_window = Window_PlayerInput.new
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@edit_window.dispose
@input_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@edit_window.update
@input_window.update
# B ボタンが押された場合
if Input.repeat?(Input::B)
# カーソル位置が 0 の場合
if @edit_window.index == 0
return
end
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# 文字を削除
@edit_window.back
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# カーソル位置が [決定] の場合
if @input_window.character == nil
# 名前が空の場合
if @edit_window.name == ""
# デフォルトの名前に戻す
@edit_window.restore_default
# 名前が空の場合
if @edit_window.name == ""
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
return
end
# アクターの名前を変更
$player_name = @edit_window.name
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# マップ画面に切り替え
$scene = Scene_SavePlayer.new
return
end
# カーソル位置が最大の場合
if @edit_window.index == 16
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 文字が空の場合
if @input_window.character == ""
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 文字を追加
@edit_window.add(@input_window.character)
return
end
end
end

#==============================================================================
# ■ Window_NameEdit
#------------------------------------------------------------------------------
#  名前入力画面で、名前を編集するウィンドウです。
#==============================================================================

class Window_PlayerEdit < Window_Base
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :name # 名前
attr_reader :index # カーソル位置
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
# max_char : 最大文字数
#--------------------------------------------------------------------------
def initialize(actor, max_char)
super(0, 0, 640, 128)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype # "Edit Name" window font
self.contents.font.size = $defaultfontsize
@actor = actor
@name = $player_name
# 名前を最大文字数以内に収める
name_array = @name.split(//)[0...16]
@name = ""
for i in 0...name_array.size
@name += name_array[i]
end
@default_name = @name
@index = name_array.size
refresh
update_cursor_rect
end
#--------------------------------------------------------------------------
# ● デフォルトの名前に戻す
#--------------------------------------------------------------------------
def restore_default
@name = @default_name
@index = @name.split(//).size
refresh
update_cursor_rect
end
#--------------------------------------------------------------------------
# ● 文字の追加
# character : 追加する文字
#--------------------------------------------------------------------------
def add(character)
if @index < 16 and character != ""
@name += character
@index += 1
refresh
update_cursor_rect
end
end
#--------------------------------------------------------------------------
# ● 文字の削除
#--------------------------------------------------------------------------
def back
if @index > 0
# 一字削除
name_array = @name.split(//)
@name = ""
for i in 0...name_array.size-1
@name += name_array[i]
end
@index -= 1
refresh
update_cursor_rect
end
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# 名前を描画
name_array = @name.split(//)
for i in 0...16
c = name_array[i]
if c == nil
c = " "
end
x = 320 - 16 * 14 + i * 28
self.contents.draw_text(x, 32, 28, 32, c, 1)
end
# グラフィックを描画
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
x = 320 - 16 * 14 + @index * 28
self.cursor_rect.set(x, 32, 28, 32)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
update_cursor_rect
end
end

#==============================================================================
# ■ Window_NameInput
#------------------------------------------------------------------------------
#  名前入力画面で、文字を選択するウィンドウです。
#==============================================================================

class Window_PlayerInput < Window_Base
CHARACTER_TABLE =
[
"A","Ą","B","C","Ć",
"D","E","Ę","F","G",
"H","I","J","K","L",
"Ł","M","N","Ń","O",
"Ó","Q","P","R","S",
"Ś","T","U","V","W",
"X","Y","Z","Ż","Ź",
"1","2","3","4","5",
"6","7","8","9","0",

"a", "ą" ,"b", "c" ,"ć",
"d","e","ę","f","g",
"h", "i" ,"j", "k" ,"l",
"ł","m","n","ń","o",
"ó","q","p","r","s",
"ś","t","u","v","w",
"x","y","z","ż","ź",
" ","~","©","@","$",
"¤","_", "-" , "!" , "?" ,
]
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(160, 128, 320, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype # "Name Input" window font
self.contents.font.size = $defaultfontsize
@index = 0
refresh
update_cursor_rect
end
#--------------------------------------------------------------------------
# ● 文字の取得
#--------------------------------------------------------------------------
def character
return CHARACTER_TABLE[@index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0..89
x = 4 + i / 5 / 9 * 152 + i % 5 * 28
y = i / 5 % 9 * 32
self.contents.draw_text(x, y, 28, 32, CHARACTER_TABLE[i], 1)
end
self.contents.draw_text(225, 9 * 32, 64, 32, "OK", 1)
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
# カーソル位置が [決定] の場合
if @index >= 90
self.cursor_rect.set(225, 9 * 32, 64, 32)
# カーソル位置が [決定] 以外の場合
else
x = 4 + @index / 5 / 9 * 152 + @index % 5 * 28
y = @index / 5 % 9 * 32
self.cursor_rect.set(x, y, 28, 32)
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# カーソル位置が [決定] の場合
if @index >= 90
# カーソル下
if Input.trigger?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
@index -= 90
end
# カーソル上
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
@index -= 90 - 40
end
# カーソル位置が [決定] 以外の場合
else
# 方向ボタンの右が押された場合
if Input.repeat?(Input::RIGHT)
# 押下状態がリピートでない場合か、
# カーソル位置が右端ではない場合
if Input.trigger?(Input::RIGHT) or
@index / 45 < 3 or @index % 5 < 4
# カーソルを右に移動
$game_system.se_play($data_system.cursor_se)
if @index % 5 < 4
@index += 1
else
@index += 45 - 4
end
if @index >= 90
@index -= 90
end
end
end
# 方向ボタンの左が押された場合
if Input.repeat?(Input::LEFT)
# 押下状態がリピートでない場合か、
# カーソル位置が左端ではない場合
if Input.trigger?(Input::LEFT) or
@index / 45 > 0 or @index % 5 > 0
# カーソルを左に移動
$game_system.se_play($data_system.cursor_se)
if @index % 5 > 0
@index -= 1
else
@index -= 45 - 4
end
if @index < 0
@index += 90
end
end
end
# 方向ボタンの下が押された場合
if Input.repeat?(Input::DOWN)
# カーソルを下に移動
$game_system.se_play($data_system.cursor_se)
if @index % 45 < 40
@index += 5
else
@index += 90 - 40
end
end
# 方向ボタンの上が押された場合
if Input.repeat?(Input::UP)
# 押下状態がリピートでない場合か、
# カーソル位置が上端ではない場合
if Input.trigger?(Input::UP) or @index % 45 >= 5
# カーソルを上に移動
$game_system.se_play($data_system.cursor_se)
if @index % 45 >= 5
@index -= 5
else
@index += 90
end
end
end
# L ボタンか R ボタンが押された場合
if Input.repeat?(Input::L) or Input.repeat?(Input::R)
# ひらがな / カタカナ 移動
$game_system.se_play($data_system.cursor_se)
if @index / 45 < 2
@index += 90
else
@index -= 90
end
end
end
update_cursor_rect
end
end

#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
#  セーブ画面およびロード画面のスーパークラスです。
#==============================================================================

class Scene_Player
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# help_text : ヘルプウィンドウに表示する文字列
#--------------------------------------------------------------------------
def initialize(help_text)
@help_text = help_text
$game_temp = Game_Temp.new
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# ヘルプウィンドウを作成
@help_window = Window_Help.new
@help_window.set_text(@help_text)
# セーブファイルウィンドウを作成
@savefile_windows = []
for i in 0..3
@savefile_windows.push(Window_SavePlayer.new(i, make_filename(i)))
end
# 最後に操作したファイルを選択
@file_index = $game_temp.last_file_index
@savefile_windows[@file_index].selected = true
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@help_window.dispose
for i in @savefile_windows
i.dispose
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@help_window.update
for i in @savefile_windows
i.update
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# メソッド on_decision (継承先で定義) を呼ぶ
on_decision(make_filename(@file_index))
$game_temp.last_file_index = @file_index
return
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# メソッド on_cancel (継承先で定義) を呼ぶ
on_cancel
return
end
# 方向ボタンの下が押された場合
if Input.repeat?(Input::DOWN)
# 方向ボタンの下の押下状態がリピートでない場合か、
# またはカーソル位置が 3 より前の場合
if Input.trigger?(Input::DOWN) or @file_index < 3
# カーソル SE を演奏
$game_system.se_play($data_system.cursor_se)
# カーソルを下に移動
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 1) % 4
@savefile_windows[@file_index].selected = true
return
end
end
# 方向ボタンの上が押された場合
if Input.repeat?(Input::UP)
# 方向ボタンの上の押下状態がリピートでない場合か、
# またはカーソル位置が 0 より後ろの場合
if Input.trigger?(Input::UP) or @file_index > 0
# カーソル SE を演奏
$game_system.se_play($data_system.cursor_se)
# カーソルを上に移動
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 3) % 4
@savefile_windows[@file_index].selected = true
return
end
end
end
#--------------------------------------------------------------------------
# ● ファイル名の作成
# file_index : セーブファイルのインデックス (0~3)
#--------------------------------------------------------------------------
def make_filename(file_index)
return "Players/Player#{file_index + 1}.pro"
end
end

#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
#  セーブ画面の処理を行うクラスです。
#==============================================================================

class Scene_SavePlayer < Scene_Player
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super("Który plik zapisać?")
end
#--------------------------------------------------------------------------
# ● 決定時の処理
#--------------------------------------------------------------------------
def on_decision(filename)
# セーブ SE を演奏
$game_system.se_play($data_system.save_se)
# セーブデータの書き込み
file = File.open(filename, "wb")
write_save_data(file)
file.close
# イベントから呼び出されている場合
if $game_temp.save_calling
# セーブ呼び出しフラグをクリア
$game_temp.save_calling = false
# マップ画面に切り替え
$scene = Scene_Title.new
return
end
# メニュー画面に切り替え
$scene = Scene_Title.new
end
#--------------------------------------------------------------------------
# ● キャンセル時の処理
#--------------------------------------------------------------------------
def on_cancel
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# イベントから呼び出されている場合
if $game_temp.save_calling
# セーブ呼び出しフラグをクリア
$game_temp.save_calling = false
# マップ画面に切り替え
$scene = Scene_Title.new
return
end
# メニュー画面に切り替え
$scene = Scene_ProfileOption.new
end
#--------------------------------------------------------------------------
# ● セーブデータの書き込み
# file : 書き込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def write_save_data(file)
# セーブファイル描画用のキャラクターデータを作成
# セーブファイル描画用のキャラクターデータを書き込む
# プレイ時間計測用のフレームカウントを書き込む
# セーブ回数を 1 増やす
# $game_system.save_count += 1
# マジックナンバーを保存する
# (エディタで保存するたびにランダムな値に書き換えられる)
# $game_system.magic_number = $data_system.magic_number
# 各種ゲームオブジェクトを書き込む
$plyr_name = $player_name
Marshal.dump($plyr_name, file)
end
end

#==============================================================================
# ■ Window_SaveFile
#------------------------------------------------------------------------------
#  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。
#==============================================================================

class Window_SavePlayer < Window_Base
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :filename # ファイル名
attr_reader :selected # 選択状態
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# file_index : セーブファイルのインデックス (0~3)
# filename : ファイル名
#--------------------------------------------------------------------------
def initialize(file_index, filename)
super(0, 64 + file_index % 4 * 104, 640, 104)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype # "File" (File #) window font
self.contents.font.size = $defaultfontsize
@file_index = file_index
@filename = "Players/Player#{@file_index + 1}.pro"
@time_stamp = Time.at(0)
@file_exist = FileTest.exist?(@filename)
if @file_exist
file = File.open(@filename, "r")
# @time_stamp = file.mtime
# @characters = Marshal.load(file)
# @frame_count = Marshal.load(file)
# @game_system = Marshal.load(file)
# @game_switches = Marshal.load(file)
# @game_variables = Marshal.load(file)
$plyr_name = Marshal.load(file)
file.close
end
refresh
@selected = false
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# ファイル番号を描画
self.contents.font.color = normal_color
if @file_exist
name = "Gracz #{@file_index + 1}: #{$plyr_name}"
else
name = "Gracz #{@file_index + 1} (X)"
end
self.contents.draw_text(4, 0, 600, 32, name)
@name_width = contents.text_size(name).width
# セーブファイルが存在する場合
if @file_exist
# キャラクターを描画

# プレイ時間を描画
# hour = @total_sec / 60 / 60
# min = @total_sec / 60 % 60
# sec = @total_sec % 60
# time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
# self.contents.draw_text(4, 8, 600, 32, $player_name, 2)
# タイムスタンプを描画
# self.contents.font.color = normal_color
# time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
# self.contents.draw_text(4, 40, 600, 32, $plyr_name, 2)
end
end
#--------------------------------------------------------------------------
# ● 選択状態の設定
# selected : 新しい選択状態 (true=選択 false=非選択)
#--------------------------------------------------------------------------
def selected=(selected)
@selected = selected
update_cursor_rect
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if @selected
self.cursor_rect.set(0, 0, @name_width + 8, 32)
else
self.cursor_rect.empty
end
end
end

#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  ロード画面の処理を行うクラスです。
#==============================================================================

class Scene_LoadPlayer < Scene_Player
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# テンポラリオブジェクトを再作成
$game_temp = Game_Temp.new
# タイムスタンプが最新のファイルを選択
$game_temp.last_file_index = 0
latest_time = Time.at(0)
for i in 0..3
filename = make_filename(i)
if FileTest.exist?(filename)
file = File.open(filename, "r")
if file.mtime > latest_time
latest_time = file.mtime
$game_temp.last_file_index = i
end
file.close
end
end
super("Który plik wczytać ?")
end
#--------------------------------------------------------------------------
# ● 決定時の処理
#--------------------------------------------------------------------------
def on_decision(filename)
# ファイルが存在しない場合
unless FileTest.exist?(filename)
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# ロード SE を演奏
$game_system.se_play($data_system.load_se)
# セーブデータの書き込み
file = File.open(filename, "rb")
read_save_data(file)
file.close
# BGM、BGS を復帰
# $game_system.bgm_play($data_system.title_bgm)
# $game_system.bgs_play($game_system.playing_bgs)
# マップを更新 (並列イベント実行)
# $player_name.update
# マップ画面に切り替え
$scene = Scene_Title.new
end
#--------------------------------------------------------------------------
# ● キャンセル時の処理
#--------------------------------------------------------------------------
def on_cancel
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# タイトル画面に切り替え
$scene = Scene_ProfileOption.new
end
#--------------------------------------------------------------------------
# ● セーブデータの読み込み
# file : 読み込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def read_save_data(file)
# セーブファイル描画用のキャラクターデータを読み込む
# プレイ時間計測用のフレームカウントを読み込む
# 各種ゲームオブジェクトを読み込む
$plyr_name = Marshal.load(file)
$player_name = $plyr_name
# マジックナンバーがセーブ時と異なる場合
# (エディタで編集が加えられている場合)
end
end



To jest MÓJ SKRYPT na profile w RPG. Tego jeszcze nie było w RPG, co?

Edit
ująłem kod w cytacie, żeby nie trzeba było przewijać na prawo i na lewo.

Edit2
Czy ktoś może tu omawiać swoje gry robione w RPG Makerze? A do serii "Miasteczko Nowoczesne" przygotowałem juz osobny dział.
_________________
Mateusz SSJ8
score=51792
combo=214
floor=680
n00b=416
rush timer=145,?? s
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,54 sekundy. Zapytań do SQL: 17