|
RPG MAKER |
| Autor |
Wiadomość |
FOX
Wow!


Wiek: 38 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: 35 Dołączył: 26 Mar 2006 Posty: 801 Skąd: Icy Tower Planet
|
Wysłany: 25 Styczeń 2008, 14:05
|
|
|
Daj jakiś link na początek (Lenistwo...) |
_________________
|
|
|
|
 |
mattirab
Moderator


Pomógł: 2 razy Wiek: 31 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 |
|
|
|
 |
FOX
Wow!


Wiek: 38 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: 35 Dołączył: 26 Mar 2006 Posty: 801 Skąd: Icy Tower Planet
|
Wysłany: 30 Styczeń 2008, 22:05
|
|
|
Daj kiedyś link do jakiejś wersji alfa |
_________________
|
|
|
|
 |
FOX
Wow!


Wiek: 38 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 22593 raz(y) 974 Bajtów |
Life000.png Pasek życia (pusty) |
 |
| Plik ściągnięto 22593 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 169 raz(y) 125.01 KB |
screenshot01.png Mapa 1 - pasek życia 2 - pasek energii 3 - bohater |
 |
| Plik ściągnięto 193 raz(y) 102.44 KB |
screenshot00.png To jest menu główne gry |
 |
| Plik ściągnięto 185 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: 39 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: 38 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: 35 Dołączył: 26 Mar 2006 Posty: 801 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 |
_________________
|
|
|
|
 |
FOX
Wow!


Wiek: 38 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: 38 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: 38 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: 38 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 |
|
|
|
 |
|
|
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
|
|