collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)  (Gelesen 4446 mal)

MelekTaus

  • Gast
MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)
« am: Juni 26, 2009, 15:55:12 »
MelekTaus' ScrollingTeleport 0.7

Inhalt
Wie der Name schon sagt, anstatt ein Ausblenden und Wieder-Einblenden beim Spieler-Teleport zu verwenden, kann man nun auch den altbekannten Scroll-Übergang nutzen.
UPDATE: Man kann jetzt jede Map-Größe verwenden, trotzdem würde ich empfehlen die Demo zu laden, weil man doch eine Kleinigkeit beachten muss.

Anleitung
Eigentlich relativ simple:
  • Event-Trigger auf "Player Touch" stellen (empfohlen).
  • Und ganz normal den Player-Transfer-Befehl einfügen.

Hinweis
  • Die SCROLLING_TELEPORT_SWITCH_ID definiert den Control-Switch mit dem man den Scroll-Effekt aktiviert bzw deaktiviert.
  • Das Event muss sich immer am Rand der Map befinden!

Script
#==============================================================================
# MelekTaus' ScrollingTeleport
# Version: 0.7
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  SCROLLING_TELEPORT_SWITCH_ID = 1
  SCROLLING_MAP_X_SPEED = 8
  SCROLLING_MAP_Y_SPEED = 6
  #--------------------------------------------------------------------------
end
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  attr_reader :scrolling_teleport_direction
  #--------------------------------------------------------------------------
  def get_display_x(x = $game_player.x)
    return 0 if x < 9
    return width - 17 if x > width - 9
    return x - 8
  end
  #--------------------------------------------------------------------------
  def get_display_y(y = $game_player.y)
    return 0 if y < 7
    return height - 13 if y > height - 7
    return y - 6
  end
  #--------------------------------------------------------------------------
  def get_screen_x(x = $game_player.x)
    return adjust_x(x * 256) / 256
  end
  #--------------------------------------------------------------------------
  def get_screen_y(y = $game_player.y)
    return adjust_y(y * 256) / 256
  end
  #--------------------------------------------------------------------------
  def setup(map_id, scrolling_teleport_direction = 0, x = nil, y = nil)
    @old_map_id = @map_id
    @old_map = @map
    @old_map_x = get_display_x
    @old_map_y = get_display_y
    @map_id = map_id
    @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
    if scrolling_teleport_direction > 0
      @map_x = get_display_x(x)
      @map_y = get_display_y(y)
      build_scroll_map(scrolling_teleport_direction)
    else
      @display_x = 0
      @display_y = 0
      @passages = $data_system.passages
      referesh_vehicles
      setup_events
      setup_scroll
      setup_parallax
      @need_refresh = false
    end
  end
  #--------------------------------------------------------------------------
  def build_scroll_map(scrolling_teleport_direction)
    if scrolling_teleport_direction > 2 and scrolling_teleport_direction < 8
      new_map = RPG::Map.new(34, 13)
      new_map.data = Table.new(34, 13, 3)
      for x in 0...17
        for y in 0...13
          for z in 0...3
            if scrolling_teleport_direction == 6
              new_map.data[x, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
            else
              new_map.data[x, y, z] = @map.data[@map_x+x, @map_y+y, z]
            end
          end
        end
      end
      for x in 0...17
        for y in 0...13
          for z in 0...3
            if scrolling_teleport_direction == 6
              new_map.data[x + 17, y, z] = @map.data[@map_x+x, @map_y+y, z]
            else
              new_map.data[x + 17, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
            end
          end
        end
      end
    else
      new_map = RPG::Map.new(17, 26)
      new_map.data = Table.new(17, 26, 3)
      for x in 0...17
        for y in 0...13
          for z in 0...3
            if scrolling_teleport_direction == 2
              new_map.data[x, y, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
            else
              new_map.data[x, y, z] = @map.data[@map_x+x, @map_y+y, z]
            end
          end
        end
      end
      for x in 0...17
        for y in 0...13
          for z in 0...3
            if scrolling_teleport_direction == 2
              new_map.data[x, y + 13, z] = @map.data[@map_x+x, @map_y+y, z]
            else
              new_map.data[x, y + 13, z] = @old_map.data[@old_map_x+x, @old_map_y+y, z]
            end
          end
        end
      end
    end
    temp_map = @map
    @map = new_map
    new_events = {}
    index = 0
    for i in @events.keys
      if @events[i].x >= @old_map_x and @events[i].x < @old_map_x + 17
      if @events[i].y >= @old_map_y and @events[i].y < @old_map_y + 13
        @events[i].event.x = @events[i].x - @old_map_x
        @events[i].event.x += 17 if scrolling_teleport_direction == 4
        @events[i].event.y = @events[i].y - @old_map_y
        @events[i].event.y += 13 if scrolling_teleport_direction == 8
        new_events[index += 1] = Game_Event.new(@map_id, @events[i].event)
        new_events[index].set_direction(@events[i].direction)
        new_events[index].wait_count = 800
      end; end
    end
    for i in temp_map.events.keys
      if temp_map.events[i].x >= @map_x and temp_map.events[i].x < @map_x + 17
      if temp_map.events[i].y >= @map_y and temp_map.events[i].y < @map_y + 13
        temp_map.events[i].x -= @map_x
        temp_map.events[i].x += 17 if scrolling_teleport_direction == 6
        temp_map.events[i].y -= @map_y
        temp_map.events[i].y += 13 if scrolling_teleport_direction == 2
        new_events[index += 1] = Game_Event.new(@map_id, temp_map.events[i])
        new_events[index].wait_count = 800
      end; end
    end
    @events = new_events
  end
  #--------------------------------------------------------------------------
end
#==============================================================================
class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  attr_reader   :event
  attr_accessor :wait_count
  #--------------------------------------------------------------------------
end
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  def perform_transfer(scrolling_teleport_direction = 0)
    if scrolling_teleport_direction > 0 and $game_map.map_id == @new_map_id
      $game_map.setup(@new_map_id)
      @new_x = 0 if scrolling_teleport_direction == 6
      @new_x = $game_map.width - 1 if scrolling_teleport_direction == 4
      @new_y = 0 if scrolling_teleport_direction == 2
      @new_y = $game_map.height - 1 if scrolling_teleport_direction == 8
      moveto(@new_x, @new_y)
    else
      return unless @transferring
      @transferring = false
      set_direction(@new_direction)
      x = @new_x
      y = @new_y
      s_dir = scrolling_teleport_direction
      if $game_map.map_id != @new_map_id
        $game_map.setup(@new_map_id, s_dir, x, y)
      end
      case s_dir
      when 2
        x = $game_map.get_screen_x
        y = 12
      when 4
        x = 17
        y = $game_map.get_screen_y
      when 6
        x = 16
        y = $game_map.get_screen_y
      when 8
        x = $game_map.get_screen_x
        y = 13
      end
      moveto(x, y)
    end
  end
  #--------------------------------------------------------------------------
  def move_slowly_forward(scrolling_teleport_direction)
    case scrolling_teleport_direction
      when 2;  s_dir = 16
      when 4;  s_dir = 17
      when 6;  s_dir = 18
      when 8;  s_dir = 19
    end
    move_route = RPG::MoveRoute.new
    move_route.repeat = false
    move_route.list[0] = RPG::MoveCommand.new(s_dir)
    move_route.list[1] = RPG::MoveCommand.new(29, [2])
    move_route.list[2] = RPG::MoveCommand.new(12)
    move_route.list[3] = RPG::MoveCommand.new(15, [100])
    move_route.list[4] = RPG::MoveCommand.new(0)
    force_move_route(move_route)
  end
  #--------------------------------------------------------------------------
  def share_input
    move_route = RPG::MoveRoute.new
    move_route.repeat = false
    move_route.list[0] = RPG::MoveCommand.new(29, [4])
    move_route.list[1] = RPG::MoveCommand.new(0)
    force_move_route(move_route)
  end
  #--------------------------------------------------------------------------
end
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  def update_viewports
    @viewport1.tone = $game_map.screen.tone
    @viewport2.color = $game_map.screen.flash_color
    @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
    @viewport1.update
    @viewport2.update
    @viewport3.update
  end
  #--------------------------------------------------------------------------
  def x;          return @viewport1.ox;   end
  #--------------------------------------------------------------------------
  def x=(value);  @viewport1.ox = value;  end
  #--------------------------------------------------------------------------
  def y;          return @viewport1.oy;   end
  #--------------------------------------------------------------------------
  def y=(value);  @viewport1.oy = value;  end
  #--------------------------------------------------------------------------
end
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  attr_accessor :scrolling_teleport_direction
  #--------------------------------------------------------------------------
  def initialize
    @scrolling_teleport_direction = 0
    @update_scrolling_teleport = 0
  end
  #--------------------------------------------------------------------------
  alias melektaus_scene_map_update update
  def update
    melektaus_scene_map_update
    update_scrolling_teleport
  end
  #--------------------------------------------------------------------------
  def update_transfer_player
    return unless $game_player.transfer?
    s_dir = 0
    if $game_switches[SCROLLING_TELEPORT_SWITCH_ID]
      p = $game_player
      s_dir = 4 if p.x == 0
      s_dir = 6 if p.x == $game_map.width - 1
      s_dir = 8 if p.y == 0
      s_dir = 2 if p.y == $game_map.height - 1
    end
    @scrolling_teleport_direction = s_dir
    if s_dir > 0
      @spriteset.dispose
      $game_player.perform_transfer(s_dir)
      @spriteset = Spriteset_Map.new
      case s_dir
        when 2;  @spriteset.y = -192
        when 4;  @spriteset.x = 256
        when 6;  @spriteset.x = -256
        when 8;  @spriteset.y = 192
      end
      $game_player.move_slowly_forward(s_dir)
      @update_scrolling_teleport = 1
    else
      fade = (Graphics.brightness > 0)
      fadeout(30) if fade
      @spriteset.dispose
      $game_player.perform_transfer
      $game_map.autoplay
      $game_map.update
      Graphics.wait(15)
      @spriteset = Spriteset_Map.new
      fadein(30) if fade
      Input.update
    end
  end
  #--------------------------------------------------------------------------
  def update_scrolling_teleport
    s_dir = @scrolling_teleport_direction
    if @update_scrolling_teleport == 1
      case s_dir
      when 2
        @spriteset.y += SCROLLING_MAP_Y_SPEED
        @spriteset.y = 192 if @spriteset.y > 192
        @update_scrolling_teleport = 2 if @spriteset.y == 192
      when 4
        @spriteset.x -= SCROLLING_MAP_X_SPEED
        @spriteset.x = -256 if @spriteset.x < -256
        @update_scrolling_teleport = 2 if @spriteset.x == -256
      when 6
        @spriteset.x += SCROLLING_MAP_X_SPEED
        @spriteset.x = 256 if @spriteset.x > 256
        @update_scrolling_teleport = 2 if @spriteset.x == 256
      when 8
        @spriteset.y -= SCROLLING_MAP_Y_SPEED
        @spriteset.y = -192 if @spriteset.y < -192
        @update_scrolling_teleport = 2 if @spriteset.y == -192
      end
    end
    if @update_scrolling_teleport == 2
      @spriteset.dispose
      $game_player.perform_transfer(s_dir)
      $game_map.autoplay
      $game_map.update
      @spriteset = Spriteset_Map.new
      Input.update
      $game_player.share_input
      @scrolling_teleport_direction = 0
      @update_scrolling_teleport = 0
    end
  end
  #--------------------------------------------------------------------------
end
#==============================================================================

Demo
MelekTaus' ScrollingTeleport.zip

Zukünftige Verbesserungen
  • Parallaxes werden miteinbezogen!


MfG, MelekTaus
« Letzte Änderung: Juni 29, 2009, 00:31:43 von MelekTaus »

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Herendil

  • Jarl Turindo
  • Moderator
  • Mr. MACK-Tile
  • ***
  • Beiträge: 283
  • Jarl Turindo
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #1 am: Juni 26, 2009, 16:21:12 »
Sieht super aus! Sehr schön, das könnte ich echt gebrauchen. Ich freue mich auf den Ptach, weil Maps meist größer sind als 17*13 :D

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Geoflare

  • Mojo Jojo
  • RTP-Mapper
  • *
  • Beiträge: 24
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #2 am: Juni 26, 2009, 21:34:25 »
Hort sich sehr toll an freu mich auf Update

Geoflare

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Nizuke

  • Database-Verunstalter
  • **
  • Beiträge: 185
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #3 am: Juni 26, 2009, 21:51:42 »
Nicht schlecht, dafür, dass es eines deiner ersten Beiträge ist, ist er ziemlich Brauchbar.
Das Script ist nicht schlecht, allerdings werde ich es, wenn überhaupt erst dann verwenden, wenn es
sozusagen makellos ist. (Habs mal in nem test-projekt ausprobiert).

Weiter so! ^^

-Edit-

Ja, wie Papilion es sagt... Ich hätte jetzt auch nicht unbedingt die Lust, alles umzumappen.

@Papilion: Das DU diese Zelda Übergänge brauchst war mir klar =D
« Letzte Änderung: Juni 27, 2009, 12:54:15 von Nizuke »

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Prince

  • Eventmeister
  • ***
  • Beiträge: 354
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #4 am: Juni 27, 2009, 09:06:33 »
Klasse, solche Übergänge sind eh besser als die teleports ^^
Ich werds mit Sicherheit (sobald ich ein neues Projekt anfange ^^) verwenden

MfG
Sei so wie du bist und nicht wie die anderen dich wollen.
FF X Blitzballrekord:
Spoiler for Hiden:

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline papilion

  • In Zeitlupe-Makerer
  • Global Mod
  • VX-Meister
  • ****
  • Beiträge: 727
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #5 am: Juni 27, 2009, 09:31:53 »
Haa! super!
Das hat mir noch gefehlt!
Sobalt es auch für größere Maps geht, werde ichs auch einsetzen.

Weil ,
alles umbauen, wäre jetzt auch nicht mein Fall^^

Papilion

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Bilbo

  • Gast
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #6 am: Juni 27, 2009, 16:00:05 »
Sowas habe ich gesucht, danke, allerdings warte ich auch noch auf das Update, weil meine Maps auch größer sind als 17x13 ^^

Aber auf jeden Fall klasse!

MfG

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Colonios

  • Maker Nerd
  • VX-Kenner
  • ****
  • Beiträge: 596
  • Events <3
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #7 am: Juni 27, 2009, 16:08:24 »
Ich hab es auch ausgetestet und es ist wirklich nice :D nur 2 sachen stören mich: 1. das schon erwähnte, dass die Maps größer sein sollten und 2. dass man nicht auf irgenteine stelle der map teleportieren kann.

Zu 2.: Du könntest ja noch eine Funktion einbauen, die Filmlike ist - also einen Umbruch álla Windows Moviemaker, den man selbst bestimmen kann (zB.: der effeckt "Rechteck" oder "Kreis")

Ist das möglich?

*Wunschliste* xD

MfG

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

MelekTaus

  • Gast
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #8 am: Juni 27, 2009, 16:46:23 »
Also, morgen werde ich mich hinsetzen und es so anpassen, dass es auf jeder Map-Größe funktioniert^^

@Colonios: Naja, auf irgendeine Stelle teleportieren wird es nicht geben, weil es ja nicht im Sinne des Scripts ist. Die Technik des Scripts ist die, dass während des ScrollingTeleports die zweite Map geladen und der vorherigen Map angehängt wird (das ist nämlich das Schwierige gewesen^^). Das Einzige, was man sich nachher schon aussuchen kann ist, wo genau am Rand (zB am oberen Rand weiter rechts, oder weiter links ;))

Das mit den Effekten ist jedoch locker machbar, das klingt gut (und da kann man sich dann schon aussuchen wo man hinteleportieren will :P)

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Colonios

  • Maker Nerd
  • VX-Kenner
  • ****
  • Beiträge: 596
  • Events <3
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #9 am: Juni 27, 2009, 17:26:06 »
Ich meinte das ja auch nicht im scrolling style, sondern halt im "fade" style ^^

Aber cool, dass du dich dem annimmst ;)

Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)

Offline Onkel Hell

  • Sol Invictus
  • Administrator
  • VX-Kenner
  • ****
  • Beiträge: 562
  • You can't shoot me, I'm AIDS !
Re: MelekTaus' ScrollingTeleport 0.6 (Zelda-Like^^)
« Antwort #10 am: Juni 27, 2009, 17:31:00 »
nette umsetzung,
da ich selbst ein zelda scrolling hab meine empfehlung an dich is das mit dem use_scrolling_teleport genau anders rum zu machen
also das der scrolling teleport der standard teleport is und man für nen normalen teleport nur nen schalter umlegen muss
macht die sache einfacher und erhöht die usability
Verborgen in der Dunkelheit
Ich kenne nur die Einsamkeit
Auf das kein Gott mich sieht, ich bin ein Eremit


Mega Man Battle Engine


Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)

Offline xelawebdev

  • Eventmeister
  • ***
  • Beiträge: 306
  • Webdeveloper, Designer
    • [Nicht fertig - Testseite]
Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)
« Antwort #11 am: Juni 29, 2009, 02:37:41 »
Find ich auch super das Script, aber das mit Switch OFF funktioniert nicht bei mir, also im Demo schon, weiss aber nicht woran das liegt.
Habe Switch OFF wenn ich aus dem Wald in die Worldmap rausgehe, aber dennoch teleportiert er wie mit Switch ON.
Brauch Hilfe xD

Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)

Offline Kyoshiro

  • Global Mod
  • RPGVX-Forengott
  • ****
  • Beiträge: 1623
  • Stand up and fight!
    • Mein Blog
Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)
« Antwort #12 am: Juni 29, 2009, 09:22:12 »
Sehr schönes Script, habe mir eben mal die Demo angeguckt und ich finde es sehr interessant.
Da ich das aber nicht unbedingt für ein Projekt brauche weiß ich noch nicht ob ich es nutze.
Für Zeldaspiele oder generell Spiele mit AKS ist es aber sicherlich eine gute Wahl. :)

Kyoshiro

Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)

Offline Colonios

  • Maker Nerd
  • VX-Kenner
  • ****
  • Beiträge: 596
  • Events <3
Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)
« Antwort #13 am: Juni 29, 2009, 13:39:47 »
Also so wie ich das sehe müssen die Maps die gleiche Höhe bzw. Breite haben (je nach dem wo der Teleport ist), damit der Teleport richtig funktioniert, oder?

MfG
« Letzte Änderung: Juni 29, 2009, 13:40:16 von Colonios »

Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)

MelekTaus

  • Gast
Re: MelekTaus' ScrollingTeleport 0.7 (Zelda-Like^^)
« Antwort #14 am: Juni 29, 2009, 14:47:57 »
Nicht unbedingt^^ Die Teleporter sollten immer Kamera-abhängig platziert werden:

Sprich: bewegt man sich im mittleren Bereich der Map so befindet sich der Spieler genau in der Mitte vom Screen, also sollte es auch nach dem Teleport auch so aussehen. Wenn der Spieler 2 Kästchen vom Rand entfernt ist, so muss er auch nach dem Teleport ebenfalls 2 Kästchen entfernt sein, weil die Kamera genau so verschoben ist.
Man muss es halt einfach nur ausprobieren, dann kommt man auch dahinter ;)

Ich hoffe, dass war jetzt irgendwie verständlich :)

MfG, MelekTaus

 


 Bild des Monats

rooftop party

Views: 3614
By: papilion

 Umfrage

  • Wer soll das BdM gewinnen?
  • Dot Kandidat 1
  • 3 (25%)
  • Dot Kandidat 2
  • 1 (8%)
  • Dot Kandidat 3
  • 2 (16%)
  • Dot Kandidat 4
  • 0 (0%)
  • Dot Kandidat 5
  • 6 (50%)
  • Stimmen insgesamt: 12
  • View Topic

 Schnellsuche





SimplePortal 2.3.3 © 2008-2010, SimplePortal