Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

1

Sonntag, 8. April 2018, 14:23

Movement Speed per Tile ändern

Und wieder brauche ich Rat - womöglich in Form eines Scriptes.
Und zwar habe ich vor, den Movement Speed des Spielers zu verringern, während er auf schädlichen Tiles läuft - z. B. Stacheln oder Moor.
Man kann in der Database ja angeben, welche Tiles Schaden zufügen - auf diesen soll dann langsamer gelaufen werden.

Im selben Zug würde ich auch gern wissen, wo ich angeben kann, wie viel Schaden solch ein Tile pro Schritt verursacht. Sicherlich kann man das irgendwo im Scripteditor machen - ich weiß aber beim besten Willen nicht wo...
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


2

Sonntag, 8. April 2018, 14:58

Zitat

Im selben Zug würde ich auch gern wissen, wo ich angeben kann, wie viel Schaden solch ein Tile pro Schritt verursacht.

Die Klasse Game_Actor enthält die entsprechenden Anweisungen:

Ruby Quellcode

635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
  #--------------------------------------------------------------------------
  # * Determine Floor Effect
  #--------------------------------------------------------------------------
  def check_floor_effect
    execute_floor_damage if $game_player.on_damage_floor?
  end
  #--------------------------------------------------------------------------
  # * Floor Damage Processing
  #--------------------------------------------------------------------------
  def execute_floor_damage
    damage = (basic_floor_damage * fdr).to_i
    self.hp -= [damage, max_floor_damage].min
    perform_map_damage_effect if damage > 0
  end
  #--------------------------------------------------------------------------
  # * Get Base Value for Floor Damage
  #--------------------------------------------------------------------------
  def basic_floor_damage
    return 10
  end
  #--------------------------------------------------------------------------
  # * Get Maximum Value for Floor Damage
  #--------------------------------------------------------------------------
  def max_floor_damage
    $data_system.opt_floor_death ? hp : [hp - 1, 0].max
  end


Die Formel die Du in Zeile 645 siehst enthält das Kürzel "fdr". Das ist die Floor Damage Rate. Die kann in der Database für jeden Helden indiviudell bei "Besonderheiten"->"Param."->"Sp-Parameter" angepasst werden.

Zitat

Und zwar habe ich vor, den Movement Speed des Spielers zu verringern, während er auf schädlichen Tiles läuft - z. B. Stacheln oder Moor.
Das könntest Du auch mit einem parallelen Event und einem Conditional Branch/Bedingte Abfrage umsetzen. Aber Du hättest das lieber über ein Script gelöst, statt einem Event auf den entsprechenden Maps?

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

3

Sonntag, 8. April 2018, 17:29

Das könntest Du auch mit einem parallelen Event und einem Conditional Branch/Bedingte Abfrage umsetzen. Aber Du hättest das lieber über ein Script gelöst, statt einem Event auf den entsprechenden Maps?
Ist die Frage... Wäre ein Script nicht ein wenig performanter? Ansonsten wäre es mir fast egal, wie es gelöst wird... Nur wüsste ich gerade nicht, wie ich das mit einer Abfrage machen könnte.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


4

Mittwoch, 11. April 2018, 23:23

Du kannst im ConditionalBranch auf der vierten Dialogseite auswählen Script und dann abfragen:

Ruby Quellcode

1
$game_player.on_damage_floor?

Dann schreibst Du für den Fall, dass der MoveSpeed auf A gesetzt wird und ansonsten wird der MoveSpeed auf B gesetzt.

Ein Script wäre vermutlich etwas performanter, aber das Event kannst Du halt leichter verwalten. Wenn Du es auf eine Map nicht draufsetzt, ist auf dieser Map der Effekt nicht. Wenn per Switch die Eventseite abgeschaltet wird, dann ist der Effekt auch abgeschaltet. Das ist alles recht einfach zu managen. Ein Script erfordert da etwas mehr Verständnis, zur Verwaltung. Aber wenn Du möchtest, liefert dir bestimmt auch jemand eine reine Scriptlösung.

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

5

Donnerstag, 12. April 2018, 22:17

Das scheint so weit zu klappen, vielen Dank.

Was mir aber noch eingefallen ist - was nice wäre - aber sicher dann doch einen Script bräuchte wäre, dass mit jedem Schritt, den man Schaden, nimmt ein Sound abgespielt wird á la Vergiftung in Pokemon.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


6

Donnerstag, 12. April 2018, 22:35

Das ginge auch mit Event. Du könntest abfragen, wann sich die Lebenspunkte des Spielers ändern und in dem Fall einen SoundEffekt abspielen. Aber einfacher geht es, wenn Du die perform_map_damage_effect-Methode überschreibst und da noch einen Audio-Effekt hinzufügst.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
class Game_Actor
  #--------------------------------------------------------------------------
  # * Execute Damage Effect on Map
  #--------------------------------------------------------------------------
  def perform_map_damage_effect
    $game_map.screen.start_flash_for_damage
    Audio.se_play( 'Audio/SE/Attack2' )
  end
end

Bei Bedarf kann auch noch Lautstärke als zweiter Parameter und Pitch als dritter Parameter an se_play übergeben werden.

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

7

Freitag, 13. April 2018, 19:40

Super, das funktioniert, danke.
Jetzt ist mir aber ein ganz anderes Problem aufgefallen.
Ich habe die Geschichte mit dem langsameren Laufen im Damage Floor jetzt mit einem Event gelöst. Es funktioniert auch - nur ist das Luftschiff, nachdem man einmal im Damage Floor war und verlangsamt wurde, auch nun plötzlich langsamer. Woran kann das liegen? Schließlich ändere ich in dem Event ja nur die Geschwindigkeit des Spielers.

Dazu noch erwähnt: Ich benutze ein Script, was du mir mal geschrieben hast, um das Luftschiff zu verlangsamen:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#==============================================================================
# ** Game_Vehicle Edit
#------------------------------------------------------------------------------
#  Change initial move speed of airships
#==============================================================================
class Game_Vehicle
  #--------------------------------------------------------------------------
  # * Initialize Move Speed
  #--------------------------------------------------------------------------
  alias_method( :org_init_move_speed_wo_broomex, :init_move_speed ) unless $!
  def init_move_speed(*args)
    org_init_move_speed_wo_broomex(*args)
    @move_speed = 5 if @type == :airship
  end
end

Oder stimmt etwas mit dem Event nicht? (siehe Anhang)
»Snugglebit« hat folgende Datei angehängt:
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


8

Freitag, 13. April 2018, 20:25

Pack die ganze Abfrage mal in ein neuen ConditionalBranch, der Abfragt, ob gerade das Luftschiff gefahren wird und nur wenn dies nicht der Fall ist, wird der Eventcode ausgeführt.
»Playm« hat folgende Datei angehängt:
  • event.jpg (41,8 kB - 4 mal heruntergeladen - zuletzt: 14. April 2018, 11:30)

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

9

Freitag, 13. April 2018, 20:51

Nein, funktioniert auch so immernoch nicht... :/
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


10

Freitag, 13. April 2018, 21:25

Hmm... vermutlich müsste in den WENN-Fall des Events noch ein SetSpeed=5. Könnte man probieren.

Okay andere Idee, die doch ein Script statt Events benutzt. Wer mag schon Events!? \o/ Der Game_Player soll einfach, wenn er auf einem damage_floor ist selber die Geschwindigkeit um 1 verringern.

Ruby Quellcode

1
2
3
4
5
6
7
8
class Game_Player
  #--------------------------------------------------------------------------
  # * Get Move Speed (Account for Dash)
  #--------------------------------------------------------------------------
  def real_move_speed
    @move_speed + (dash? ? 1 : 0) + (on_damage_floor? ? -1 : 0)
  end
end
Ist natürlich problematisch, wenn die Geschwinigkeit schon auf "1" (8x langsamer) stand, dann bleibt er nämlich auf dem damage_floor stecken. Dann bräuchte man eine untere Schranke:

Ruby Quellcode

1
2
3
4
5
6
7
8
class Game_Player
  #--------------------------------------------------------------------------
  # * Get Move Speed (Account for Dash)
  #--------------------------------------------------------------------------
  def real_move_speed
    [@move_speed + (dash? ? 1 : 0) + (on_damage_floor? ? -1 : 0), 1].max
  end
end

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

11

Freitag, 13. April 2018, 21:43

Super, jetzt klappt alles einwandfrei, danke :D
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:


Social Bookmarks