• Anmelden

Josey

Storyteller

  • »Josey« ist der Autor dieses Themas

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

1

Donnerstag, 26. März 2015, 15:54

[Erledigt] Wachungas Footprints - Add On

Hallo! :)

Ich benutze inzwischen erfolgreich das Footprints-Script von Wachunga.
Hier ist meine Version:

Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
=begin
 ============
  Dynamic Footprints - version 1.0 (2005-11-07)
 ============
  by Wachunga
 
 0.95 - original release
 1.0 - fixed a small bug with directional footprints and
       updated the compatibility list
 
 SETUP:
 1) From the database (Tileset tab), give the appropriate tiles of any
    tilesets that you want to show footprints (e.g. sand in "Desert",
    snow in "Snow Field") the terrain tag 1.
 2) Place the footprints file in the Graphics/Tilesets folder.
 
 To prevent an event from having any footprints (e.g. birds), include <nofp>
 somewhere in its name.
 
 (If using non-RTP sprites, you may want to create customized footprints.)
 
 FEATURES:
 * customizable duration footprint fading (optional)
 * direction-specific footprints (optional)
 * rounded footprints paths
 * overlapping footprints supported
 * handles move events (jumping, speed changes, etc) and teleportation
 
 COMPATIBILITY:
 1) Cogwheel's Pixel Movement script - unfortunately, pixel movement by its
    very nature isn't very compatible with footprints (short of using sprites
    or pictures instead of a tileset) because a character can move part way
    across a tile without footprints appearing.
 
  2) Near Fantastica's Squad Based Movement/Action Battle System script -
     make sure it is below this script
 
  3) Near Fantastica's Updated Day Night script - again, make sure it is below
     this script
 
  4) Baskinein's Animated Sprite script - see:
     http://www.rmxp.net/forums/index.php?s=&showtopic=27407&view=findpost&p=261921
 
  5) Fukuyama's Caterpillar script - to only have one set of footprints
     for the whole group, no modifications are necessary (just make sure his
     script is above this one). To have a separate (overlapping) set of
     footprints for each character, uncomment (by moving the "= end") the
     following lines:
 
module Train_Actor
class Game_Party_Actor < Game_Character     
  def move_down(turn_enabled = true)
    if turn_enabled
      turn_down
    end
    if passable?(@x, @y, Input::DOWN)
      turn_down
      @y += 1
      increase_steps
    end
  end
  def move_left(turn_enabled = true)
    if turn_enabled
      turn_left
    end
    if passable?(@x, @y, Input::LEFT)
      turn_left
      @x -= 1
      increase_steps
    end
  end
  def move_right(turn_enabled = true)
    if turn_enabled
      turn_right
    end
    if passable?(@x, @y, Input::RIGHT)
      turn_right
      @x += 1
      increase_steps
    end
  end
  def move_up(turn_enabled = true)
    if turn_enabled
      turn_up
    end
    if passable?(@x, @y, Input::UP)
      turn_up
      @y -= 1
      increase_steps
    end
  end
end
end
 
=end 
 
#----------------------------------------------------------------------
# Footprints for six situations (down->up, left->right, down->left,
# left->up, up->right and right->down) are required (twelve for
# directional footprints). See the provided footprints template
# (footprints_template.png) for specific details, noting
# that the right half of the template can be empty if using the default
# of non-directional footprints (i.e. leaving FP_DIRECTIONAL = false).
FP_FILE = "footprints_default"
#----------------------------------------------------------------------
# FP_DIRECTIONAL specifies whether there are direction-specific
# footprints (e.g. footprints from player moving up are different
# from those left when player is moving down)
FP_DIRECTIONAL = false
#----------------------------------------------------------------------
# Terrain tag(s) as set in the database
FP_TAG = 7
#----------------------------------------------------------------------
# How much time elapses before footprints begin to fade
FP_BEFORE_FADE_TIME = 100
# After beginning to fade, how long the fading process actually takes
FP_FADE_TIME = 100
# Note: it's possible to maintain footprints indefinitely (with
# FP_FADE_TIME = 0), but if the player opens a menu or changes maps,
# the footprints won't be saved. To allow them to persist even then,
# use Near's Dynamic Maps script (slight modifications would be needed).
#----------------------------------------------------------------------
# tilemap indexes (do not modify)
# regular:
FP_DU = 384
FP_LR = 385
FP_DL = 386
FP_LU = 387
FP_UR = 388
FP_RD = 389
# directional:
FP_UD = 512
FP_RL = 513
FP_DR = 514
FP_RU = 515
FP_UL = 516
FP_LD = 517
 
#----------------------------------------------------------------------
 
class Spriteset_Map
 attr_accessor :footprints  
 attr_accessor :fp_tilemap 
 def initialize
   @viewport1 = Viewport.new(0, 0, 640, 480)
   @viewport2 = Viewport.new(0, 0, 640, 480)
   @viewport3 = Viewport.new(0, 0, 640, 480)
   @viewport2.z = 200
   @viewport3.z = 5000
   @tilemap = Tilemap.new(@viewport1)
   @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
   for i in 0..6
     autotile_name = $game_map.autotile_names[i]
     @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
   end
   @tilemap.map_data = $game_map.data
   @tilemap.priorities = $game_map.priorities
   @panorama = Plane.new(@viewport1)
   @panorama.z = -1000
   @fog = Plane.new(@viewport1)
   @fog.z = 3000
   @character_sprites = []
   for i in $game_map.events.keys.sort
     sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
     @character_sprites.push(sprite)
   end
   @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
   @weather = RPG::Weather.new(@viewport1)
   @picture_sprites = []
   for i in 1..50
     @picture_sprites.push(Sprite_Picture.new(@viewport2,
       $game_screen.pictures[i]))
   end
   @timer_sprite = Sprite_Timer.new
 
   # Dynamic Footprints additions begin
   @footprints = []
   fp_tileset = FP_DIRECTIONAL ? Bitmap.new(256,1024) : Bitmap.new(256,512)
   # make a column for each footprint image
   # right -> down
   fp_tileset.blt(160, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 0, 32, 32))
   # up -> right
   fp_tileset.blt(128, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 32, 32, 32))   
   # left -> right   
   fp_tileset.blt(32, 0, RPG::Cache.tileset(FP_FILE), Rect.new(0, 64, 32, 32))    
   # down -> left
   fp_tileset.blt(64, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 0, 32, 32))
   # left -> up
   fp_tileset.blt(96, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 32, 32, 32))   
   # down -> up
   fp_tileset.blt(0, 0, RPG::Cache.tileset(FP_FILE), Rect.new(32, 64, 32, 32))
 
   # fill out each column, making copies of the image with decreasing opacity
   0.step(5*32, 32) do |x|
     opacity = 255
     0.step(15*32, 32) do |y|
       fp_tileset.blt(x, y, fp_tileset, Rect.new(x, 0, 32, 32), opacity)
       opacity -= 16
     end
   end
 
   if FP_DIRECTIONAL
     # down -> right
     fp_tileset.blt(160, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 0, 32, 32))
     # right -> up
     fp_tileset.blt(128, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 32, 32, 32))   
     # right -> left
     fp_tileset.blt(32, 512, RPG::Cache.tileset(FP_FILE), Rect.new(64, 64, 32, 32))    
     # left -> down
     fp_tileset.blt(64, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 0, 32, 32))
     # up -> left
     fp_tileset.blt(96, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 32, 32, 32))   
     # up -> down
     fp_tileset.blt(0, 512, RPG::Cache.tileset(FP_FILE), Rect.new(96, 64, 32, 32))
 
     0.step(5*32, 32) do |x|
       opacity = 255
       512.step(32*32, 32) do |y|
         fp_tileset.blt(x, y, fp_tileset, Rect.new(x, 512, 32, 32), opacity)
         opacity -= 16
       end
     end   
   end
 
   @fp_tilemap = Tilemap.new(@viewport1)   
   @fp_tilemap.tileset = fp_tileset
   @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
@fp_tilemap.priorities = Table.new(8*32)
   # end Dynamic Footprints additions
 
   update
 end
 
 alias fp_dispose dispose
 def dispose
   @fp_tilemap.dispose
   fp_dispose
 end
 
 alias fp_update update
 def update
   @fp_tilemap.ox = $game_map.display_x / 4
   @fp_tilemap.oy = $game_map.display_y / 4
   @fp_tilemap.update
   unless FP_FADE_TIME == 0
     for fp in @footprints
       if fp.time > 1
         fp.time -= 1
         if fp.fade and (FP_FADE_TIME - fp.time) % (FP_FADE_TIME/16.0) < 1
           @fp_tilemap.map_data[fp.x,fp.y,fp.z] += 8
         end
       else
         if not fp.fade
           # begin fading
           fp.time = FP_FADE_TIME
           fp.fade = true
         else        
           @fp_tilemap.map_data[fp.x,fp.y,fp.z] = 0
           @footprints.delete(fp)
         end
       end
     end
   end
   fp_update
 end
 
  def show_footprints(fp_index,fp_x,fp_y)
    # start with first layer, then stack footprints as necessary
    fp_z = 0
    if @fp_tilemap.map_data[fp_x,fp_y,fp_z] == 0
     @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
    else
     fp_z = 1
     if @fp_tilemap.map_data[fp_x,fp_y,fp_z] == 0
       @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
     else
       fp_z = 2
       if @fp_tilemap.map_data[fp_x,fp_y,fp_z] != 0
         # delete the existing footprint at these coords from the list
         # (to prevent having multiples)
         for i in @footprints.reverse
           if i.x == fp_x and i.y == fp_y and i.z == fp_z
             @footprints.delete(i)
             break
           end
         end
       end
       @fp_tilemap.map_data[fp_x,fp_y,fp_z] = fp_index
     end
    end
    @footprints.push(Footprint.new(fp_x,fp_y,fp_z))     
  end  
 
end
 
#-------------------------------------------------------------------------------
 
class Game_Event < Game_Character
  alias fp_ge_init initialize
  def initialize(map_id, event) 
   fp_ge_init(map_id, event)
   if @event.name.upcase.include?('<NOFP>')
     @fp_id = nil
   end
  end
end
 
#-------------------------------------------------------------------------------
 
class Game_Character
 
 alias fp_gc_init initialize
 def initialize
   fp_gc_init
   # 1st argument = second last x/y
   # 2nd argument = last x/y
   @last_x = [0,0]
   @last_y = [0,0]
   @fp_id = 0 # default footprints
 end
 
 def footprints
   # determine which prints to draw and where
   if terrain_tag(@last_x[1],@last_y[1]) != FP_TAG
     return
   end
   fp_index = nil
   # left
   if @x > @last_x[1]
     if @last_y[1] > @last_y[0]
       fp_index = FP_UR
     elsif @last_y[1] < @last_y[0]
       fp_index = FP_DIRECTIONAL ? FP_DR : FP_RD
     else
       fp_index = FP_LR
     end
   else
     # right
     if @x < @last_x[1]
       if @last_y[1] > @last_y[0]
         fp_index = FP_DIRECTIONAL ? FP_UL : FP_LU
       elsif @last_y[1] < @last_y[0]
         fp_index = FP_DL
       else
         fp_index = FP_DIRECTIONAL ? FP_RL : FP_LR
       end
     else
       # up
       if @y < @last_y[1]
         if @last_x[1] > @last_x[0]
           fp_index = FP_LU
         elsif @last_x[1] < @last_x[0]
           fp_index = FP_DIRECTIONAL ? FP_RU : FP_UR
         else
           fp_index = FP_DU
         end
       # down
       elsif @y > @last_y[1]
         if @last_x[1] > @last_x[0]
           fp_index = FP_DIRECTIONAL ? FP_LD : FP_DL
         elsif @last_x[1] < @last_x[0]
           fp_index = FP_RD
         else
           fp_index = FP_DIRECTIONAL ? FP_UD : FP_DU
         end
       end
     end
   end
   if fp_index != nil
     fp_x = @last_x[1]
     fp_y = @last_y[1]
     $scene.spriteset.show_footprints(fp_index,fp_x,fp_y)
   end
 end
 
  def moveto(x, y)
    @x = x
    @y = y
    @real_x = x * 128
    @real_y = y * 128
    if @fp_id != nil
      # track the last positions
      @last_x = [@x,@x]
      @last_y = [@y,@y]
    end
  end 
 
  def increase_steps
    @stop_count = 0
    # show footprints if enabled for this character
    if @fp_id != nil and $scene.is_a?(Scene_Map)
      footprints
      # track the last positions
      @last_x.shift
      @last_x.push(@x)   
      @last_y.shift
      @last_y.push(@y)   
    end
  end
 
  def terrain_tag(x=@x,y=@y)
    return $game_map.terrain_tag(x, y)
  end
 
  def update_jump
    @jump_count -= 1
    @real_x = (@real_x * @jump_count + @x * 128) / (@jump_count + 1)
    @real_y = (@real_y * @jump_count + @y * 128) / (@jump_count + 1)
    if @fp_id != nil and @jump_count == 0
      # track the last positions
      @last_x = [@x,@x]
      @last_y = [@y,@y]      
    end
  end  
 
end
 
#-------------------------------------------------------------------------------
 
class Scene_Map
  attr_reader :spriteset
 
  # only change is a couple of (commented) sections to prevent teleporting
  # within same map from losing footprints when the spriteset is recreated
  def transfer_player
    $game_temp.player_transferring = false
    if $game_map.map_id != $game_temp.player_new_map_id
      $game_map.setup($game_temp.player_new_map_id)
    else # Dynamic Footprints
      fp = @spriteset.footprints
      md = @spriteset.fp_tilemap.map_data
    end
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    case $game_temp.player_new_direction
    when 2
      $game_player.turn_down
    when 4
      $game_player.turn_left
    when 6
      $game_player.turn_right
    when 8
      $game_player.turn_up
    end
    $game_player.straighten
    $game_map.update
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    if fp != nil or md != nil # Dynamic Footprints
      @spriteset.footprints = fp
      @spriteset.fp_tilemap.map_data = md
    end
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      Graphics.transition(20)
    end
    $game_map.autoplay
    Graphics.frame_reset
    Input.update
  end 
end
 
#-------------------------------------------------------------------------------
 
class Footprint
 attr_reader :x
 attr_reader :y
 attr_reader :z
 attr_accessor :time
 attr_accessor :fade
 
 def initialize(x,y,z)
   @x = x
   @y = y
   @z = z
   @time = FP_BEFORE_FADE_TIME
   @fade = false
 end
 
end
zum Lesen den Text mit der Maus markieren


(Ich glaube daran wurde nichts verändert, aber zur Sicherheit habe ich meine Version aus meinen Scripts eingefügt, falls da doch was war)


Jetzt wollte ich fragen (eventuell ist das sogar schon eingebaut...?), ob es möglich ist, dass verschiedene Events verschiedene Footprints machen? Es ist jedenfalls möglich, die Footprints auszustellen ("To prevent an event from having any footprints (e.g. birds), include <nofp> somewhere in its name").
Inzwischen laufen meine Charas durch die Wüste und ihnen kommen in Zukunft Monster entgegen. Jetzt fände ich es merkwürdig, wenn diese Monster keine oder menschliche Fußtappsen haben.

Sollte es noch nicht eingebaut sein, könnte ich mir vorstellen, dass Events standartmäßig auf die normale Grafik zugreifen und Events mit einem bestimmten Trigger, nutzen dann eine andere Grafik. Der Trigger könnte ein Command sein oder ein Wort im Eventnamen (wie oben beim ausstellen der Footprints <nofp>).
Wäre das schwer einzubauen? Jedenfalls würde es meinem Spiel nochmal ein ganzes Stück mehr Athmo verleien ;)

Ich würde mich über Hilfe freuen!


Josey~
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Josey« (6. April 2015, 15:57)


2

Donnerstag, 26. März 2015, 18:58

Jetzt wollte ich fragen (eventuell ist das sogar schon eingebaut...?), ob es möglich ist, dass verschiedene Events verschiedene Footprints machen?

Es scheint bereits Ansätze dafür zu geben, die aber nicht weiter verfolgt wurden.
Es gibt die @fp_id, die für normale Fußstapfen auf Null gesetzt wird, aber es gibt keine Behandlungen für andere IDs wie Eins, Zwei oder Drei.

In der Methode Game_Character#footprints wird der Index bestimmt.
Hier könnte man basierend auf der fp_id weitere Footprints ermöglichen.
Originaler Code:

Ruby Quellcode

369
370
371
372
373
   if fp_index != nil
     fp_x = @last_x[1]
     fp_y = @last_y[1]
     $scene.spriteset.show_footprints(fp_index,fp_x,fp_y)
   end

Einführung einer Verschiebung, je nachdem welche fp_id der Char hat:

Ruby Quellcode

369
370
371
372
373
374
375
  if fp_index != nil
    fp_x = @last_x[1]
    fp_y = @last_y[1]
    offset = 1024 # magic number, siehe Spriteset_Map#initialize
    fp_index_by_kind = fp_index + offset * @fp_id
    $scene.spriteset.show_footprints(fp_index_by_kind,fp_x,fp_y)
  end

Dazu käme dann noch, das an entsprechender Stelle im Footprint-Set auch Fußabdrücke hinterlegt werden (->Spriteset_Map#initialize erweitern) und irgendwie festlegen zu können, wer jetzt welche fp_id hat.

Zitat von »Josey«

Der Trigger könnte ein Command sein oder ein Wort im Eventnamen
Fände ein Kommentar auf der Seite besser, da durch Switches sich ja vielleicht die Eventseite ändert, und aus einem Boden-Event ein Luft-Event werden kann, oder ein Mensch verwandelt sich in einen Werwolf und hinterlässt plötzlich andere Tapser als vorher.

Zitat von »Josey«

Wäre das schwer einzubauen?
Ne, man müsste halt überlegen nach welchem Schema man die Grafiken ablegt: Sollen es verschiedene Grafiken sein, oder ist es ein Bild wo die verschiedenen Abdrücke untereinander aufgereiht werden? Und wie die Markierung des Events aussehen soll. Das sind Anwenderfragen - umsetzbar ist alles, die Frage ist nur: Was ist am angenehmsten zu benutzen?

Josey

Storyteller

  • »Josey« ist der Autor dieses Themas

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

3

Donnerstag, 26. März 2015, 20:57

Zitat

Einführung einer Verschiebung, je nachdem welche fp_id der Char hat:

Aber das funktioniert so wie dus jetzt geschrieben hast noch nicht, richtig?

Zitat

Fände ein Kommentar auf der Seite besser, da durch Switches sich ja vielleicht die Eventseite ändert, und aus einem Boden-Event ein Luft-Event werden kann, oder ein Mensch verwandelt sich in einen Werwolf und hinterlässt plötzlich andere Tapser als vorher.

Das ist ein sehr trifftiger Einwand. Wie aber kann man das für den Player festlegen? Was wenn der seine Fußabdrücke aus irgendeinem Grund ändern? Zum Beispiel wenn er auf etwas draufsteigt (Pferd, Vogel)? Könnte man dann per Scriptbefehl auch die Footprints für den Player ändern?

Zitat

Ne, man müsste halt überlegen nach welchem Schema man die Grafiken ablegt: Sollen es verschiedene Grafiken sein, oder ist es ein Bild wo die verschiedenen Abdrücke untereinander aufgereiht werden? Und wie die Markierung des Events aussehen soll. Das sind Anwenderfragen - umsetzbar ist alles, die Frage ist nur: Was ist am angenehmsten zu benutzen?


Ich fände mehrere kleine BIlder jetzt übersichtlicher- allerdings sind die dann zusammengenommen auch größer, als ein großes Bild, oder? (müsste ich mal nachprüfen)
Ein Comment ist wirklich die beste Lösung, insoweit es sich dann nicht mit den anderen Comment-Befehlen beißt.
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

4

Freitag, 27. März 2015, 00:31

Aber das funktioniert so wie dus jetzt geschrieben hast noch nicht, richtig?

Stimmt genau, das ist nur ein theoretischer Ansatz gewesen.

Wie aber kann man das für den Player festlegen? Was wenn der seine Fußabdrücke aus irgendeinem Grund ändern?
Das mit einem Eventbefehl zu machen ist garkein Problem.

Ich fände mehrere kleine BIlder jetzt übersichtlicher- allerdings sind die dann zusammengenommen auch größer, als ein großes Bild, oder? (müsste ich mal nachprüfen)
Bild

Ich habe schonmal angefangen.
Hier wäre die Erweiterung (noch unfertig) als neues Skript über Main einzufügen.

Aktuell liest er die Option noch nicht aus dem Event Kommentar aus, Du musst dies also mit einem Skriptbefehl ändern:
Spoiler
Als neues Skript unterhalb des Dynamic Footprints Skript und über Main einfügen.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
=begin
 ============
  Dynamic Footprints Erweiterung
 ============
  - version 1.0 (2005-11-07) by Wachunga
  - Erweiterung (2015-03-26) by Playm (unfinished)
=end
#==============================================================================
# ** Konfiguration
#==============================================================================
# Es werden Fußabdrücke für sechs Situationen (unten->oben, links->rechts,
# rechts->links, links->oben, oben->rechts und rechts->runter) benötigt
# (zwölf, wenn die Richtung wichtig ist). Siehe das beigelegte 
# footprint template für spezifische Details. Die Rechte Hälfte wird nur
# benötigt, wenn FP_DIRECTIONAL auf true steht.
# Liste hier die einzelnen zu verwendenden Dateien auf:
FP_FILE = ["footprints_default",    # fp_id 0
           "footprints_default3",   # fp_id 1
           "footprints_monster",    # fp_id 2
           "footprints_default2"    # fp_id 3
          ]
#==============================================================================
# ** Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def setup_fp_tileset
    fp_tileset = Bitmap.new(256,1024 * FP_FILE.size)
    # make a column for each footprint image
    FP_FILE.each_with_index do |name, i|
      y = 1024 * i
      # right -> down
      fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new( 0,  0, 32, 32))
      # up -> right
      fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new( 0, 32, 32, 32))
      # left -> right
      fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new( 0, 64, 32, 32))
      # down -> left
      fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(32,  0, 32, 32))
      # left -> up
      fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(32, 32, 32, 32))
      # down -> up
      fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(32, 64, 32, 32))
    end
    # fill out each column, making copies of the image with decreasing opacity
    FP_FILE.size.times do |i|
      offset = i * 1024
      for col in 0..5
        opacity = 255
        for row in 0..15
          dx = col * 32
          dy = row * 32 + offset
          fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
          opacity -= 16
        end
      end
    end
 
    if FP_DIRECTIONAL
      FP_FILE.each_with_index do |name, i|
        y = 1024 * i + 512
        # down -> right
        fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new(64, 0, 32, 32))
        # right -> up
        fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new(64, 32, 32, 32))   
        # right -> left
        fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new(64, 64, 32, 32))    
        # left -> down
        fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(96,  0, 32, 32))
        # up -> left
        fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(96, 32, 32, 32))   
        # up -> down
        fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(96, 64, 32, 32))
      end
 
      FP_FILE.size.times do |i|
        offset = i * 1024 + 512
        for col in 0..5
          opacity = 255
          for row in 0..16
            dx = col * 32
            dy = row * 32 + offset
            fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
            opacity -= 16
          end
        end
      end
    end
    return fp_tileset
  end
  #--------------------------------------------------------------------------
  # * Initialisation
  #--------------------------------------------------------------------------
  def initialize
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
                                               $game_screen.pictures[i] ) )
    end
    @timer_sprite = Sprite_Timer.new
    # Dynamic Footprints additions begin
    @footprints = []
    @fp_tilemap = Tilemap.new(@viewport1)   
    @fp_tilemap.tileset = setup_fp_tileset
 
    @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
    @fp_tilemap.priorities = Table.new(8*32)
    # end Dynamic Footprints additions
    update
  end
end
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  attr_accessor( :fp_id )
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def footprints
    # determine which prints to draw and where
    if terrain_tag(@last_x[1],@last_y[1]) != FP_TAG
      return
    end
    fp_index = nil
    # left
    if @x > @last_x[1]
      if @last_y[1] > @last_y[0]
        fp_index = FP_UR
      elsif @last_y[1] < @last_y[0]
        fp_index = FP_DIRECTIONAL ? FP_DR : FP_RD
      else
        fp_index = FP_LR
      end
    else
      # right
      if @x < @last_x[1]
        if @last_y[1] > @last_y[0]
          fp_index = FP_DIRECTIONAL ? FP_UL : FP_LU
        elsif @last_y[1] < @last_y[0]
          fp_index = FP_DL
        else
          fp_index = FP_DIRECTIONAL ? FP_RL : FP_LR
        end
      else
        # up
        if @y < @last_y[1]
          if @last_x[1] > @last_x[0]
            fp_index = FP_LU
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_RU : FP_UR
           else
            fp_index = FP_DU
          end
        # down
        elsif @y > @last_y[1]
         if @last_x[1] > @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_LD : FP_DL
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_RD
          else
           fp_index = FP_DIRECTIONAL ? FP_UD : FP_DU
          end
        end
      end
    end
    if fp_index != nil
      fp_x = @last_x[1]
      fp_y = @last_y[1]
      offset = 8 * 32
      fp_index_by_kind = fp_index + offset * @fp_id
      $scene.spriteset.show_footprints( fp_index_by_kind, fp_x, fp_y ) 
    end
  end
end
zum Lesen den Text mit der Maus markieren

Mit diesen Eventbefehlen kannst Du vorerst für Spieler und Event 5 die Fußabdrücke auf Set1 ändern.

Ruby Quellcode

1
2
3
4
5
get_character(-1).fp_id = 1
 
event_id = 5
event = get_character(event_id)
event.fp_id = 1

Füg einfach mal mehrere Sets ein, ersetze die Namen oben in der Konfiguration entsprechend und spiel etwas damit rum, ob es so ist wie Du es dir vorstellst mit den verschiedenen Fußabdrücken. Wenn es dir gefällt rüste ich das autoamtische Auswählen der fp_id je nach Markierung im EventKommentar nach.

Josey

Storyteller

  • »Josey« ist der Autor dieses Themas

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

5

Freitag, 27. März 2015, 08:10

:D

Zitat

Das mit einem Eventbefehl zu machen ist garkein Problem.

Supi :3

Zitat

Ich habe schonmal angefangen.
Wenn es dir gefällt rüste ich das autoamtische Auswählen der fp_id je nach Markierung im EventKommentar nach.

Es ist wunderschön Q___Q
Genauso hab ich mir das vorgestellt! :D Ich habe jetzt nur mit improvisierten Foots rumgespielt (grell rot und grün und grüne Krallenfüße XD), aber alles passt zusammen! Selbst wenn sie verschiedene Foots haben, legen die sich übereinander und faden dann aus, genau so, wie ichs wollte! Ich hatte nur Anfangs vergessen, wo das mit der Direction war, weswegen die Krallen dann Rückwärts liefen, aber das hatte ich dann hinbekommen :P
Playm- super. 1+! :D

Kannst du das <nofp> noch als Comment integrieren? Damit der Player und seine Mannen auch keine Foots mehr haben können und dann wieder welche? Oder soll ich dann ein leeres FP-Set verwenden?

Vielen Dank! Deine Scripts bereichern mein Spiel *_*


Edit: Mir ist noch aufgefallen, als ich nun mit untransparenten FPs gearbeitet habe, dass die Priority offenbar nicht so richtig funktioniert. Teilweise sieht man die FPs auf dem Kopf des Protas und manchmal schimmern sie nur durch. Das hat aber glaub ich nix mit deinem Add-On zu tun. Und ich weiß auch nicht, ob das wichtig ist zu regeln, denn bei TRansparenten FPs sieht man das ja kaum.
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Josey« (27. März 2015, 10:35)


6

Freitag, 27. März 2015, 23:11

Hier ist das überarbeitete AddOn.
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
#==============================================================================
# ** Dynamic Footprints AddOn für Josey
#==============================================================================
#  Original Dynamic Footprints Skript in Version 1.0 by Wachunga
#  
#  Fügt die Option hinzu mehrere verschiedene Fußabdrücke zu verwenden.
#  Dafür werden unten einfach mehrere Dateinamen angegeben, die im Tileset-
#  Ordner liegen müssen.
#  
#  Schreibt in ein Eventkommentar
#    <fp id=1/>
#  um einem Event andere Fußabdrücke zu geben, oder
#    <nofp>
#  damit das Event keine Fußabdrücke hinterlässt. Der Eventname wird nichtmehr
#  berücksichtigt.
#  Ihr könnt auch für beliebige Figuren der Map (auch für den Spieler) per
#  Skriptbefehl die zu verwendenden Abdrücke wählen.
#  Holt euch erstmal mit get_character(id) das Event Nummer 17 oder den Helden
#    player = get_character(-1)
#    event  = get_chatacter(17)
#  Dann via .fp_id=X die fp_id ändern:
#    player.fp_id = nil
#    event.fp_id = 3
#  Nun hinterlässt der Spieler keine Fußabdrücke mehr, und das Event Nummer 17
#  hinterlässt entsprechende Abdrücke, zur fp_id 3.
#------------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Mar 2015
#  Maker: RPG Maker XP
#  Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** Konfiguration
#==============================================================================
# Es werden Fußabdrücke für sechs Situationen (unten->oben, links->rechts,
# rechts->links, links->oben, oben->rechts und rechts->runter) benötigt
# (zwölf, wenn die Richtung wichtig ist). Siehe das beigelegte 
# footprint template für spezifische Details. Die Rechte Hälfte wird nur
# benötigt, wenn FP_DIRECTIONAL auf true steht.
# Liste hier die einzelnen zu verwendenden Dateien auf:
FP_FILE = ["footprints_default",    # fp_id 0 (Standard)
           "footprints_default3",   # fp_id 1
           "footprints_monster",    # fp_id 2
           "footprints_default2"    # fp_id 3
          ]
#==============================================================================
# ** Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Setup FP Tileset
  #--------------------------------------------------------------------------
  def setup_fp_tileset
    fp_tileset = Bitmap.new(256,1024 * FP_FILE.size)
    # make a column for each footprint image
    FP_FILE.each_with_index do |name, i|
      y = 1024 * i
      # right -> down
      fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new( 0,  0, 32, 32))
      # up -> right
      fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new( 0, 32, 32, 32))
      # left -> right
      fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new( 0, 64, 32, 32))
      # down -> left
      fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(32,  0, 32, 32))
      # left -> up
      fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(32, 32, 32, 32))
      # down -> up
      fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(32, 64, 32, 32))
    end
    # fill out each column, making copies of the image with decreasing opacity
    FP_FILE.size.times do |i|
      offset = i * 1024
      for col in 0..5
        opacity = 255
        for row in 0..15
          dx = col * 32
          dy = row * 32 + offset
          fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
          opacity -= 16
        end
      end
    end
    # Draw Directional Parts
    if FP_DIRECTIONAL
      FP_FILE.each_with_index do |name, i|
        y = 1024 * i + 512
        # down -> right
        fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new(64, 0, 32, 32))
        # right -> up
        fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new(64, 32, 32, 32))   
        # right -> left
        fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new(64, 64, 32, 32))    
        # left -> down
        fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(96,  0, 32, 32))
        # up -> left
        fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(96, 32, 32, 32))   
        # up -> down
        fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(96, 64, 32, 32))
      end
      # Fill Columns
      FP_FILE.size.times do |i|
        offset = i * 1024 + 512
        for col in 0..5
          opacity = 255
          for row in 0..16
            dx = col * 32
            dy = row * 32 + offset
            fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
            opacity -= 16
          end
        end
      end
    end
    return fp_tileset
  end
  #--------------------------------------------------------------------------
  # * Initialisation
  #--------------------------------------------------------------------------
  def initialize
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
                                               $game_screen.pictures[i] ) )
    end
    @timer_sprite = Sprite_Timer.new
    # Dynamic Footprints additions begin
    @footprints = []
    @fp_tilemap = Tilemap.new(@viewport1)   
    @fp_tilemap.tileset = setup_fp_tileset
    @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
    @fp_tilemap.priorities = Table.new(8*32*FP_FILE.size)
    # end Dynamic Footprints additions
    update
  end
end
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # * Attr
  #--------------------------------------------------------------------------
  attr_accessor( :fp_id )
  #--------------------------------------------------------------------------
  # * Overwrite original footprints Method from Wachunga
  #--------------------------------------------------------------------------
  def footprints
    # determine which prints to draw and where
    if terrain_tag(@last_x[1],@last_y[1]) != FP_TAG
      return
    end
    fp_index = nil
    # left
    if @x > @last_x[1]
      if @last_y[1] > @last_y[0]
        fp_index = FP_UR
      elsif @last_y[1] < @last_y[0]
        fp_index = FP_DIRECTIONAL ? FP_DR : FP_RD
      else
        fp_index = FP_LR
      end
    else
      # right
      if @x < @last_x[1]
        if @last_y[1] > @last_y[0]
          fp_index = FP_DIRECTIONAL ? FP_UL : FP_LU
        elsif @last_y[1] < @last_y[0]
          fp_index = FP_DL
        else
          fp_index = FP_DIRECTIONAL ? FP_RL : FP_LR
        end
      else
        # up
        if @y < @last_y[1]
          if @last_x[1] > @last_x[0]
            fp_index = FP_LU
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_RU : FP_UR
           else
            fp_index = FP_DU
          end
        # down
        elsif @y > @last_y[1]
         if @last_x[1] > @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_LD : FP_DL
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_RD
          else
           fp_index = FP_DIRECTIONAL ? FP_UD : FP_DU
          end
        end
      end
    end
    if fp_index != nil
      fp_x = @last_x[1]
      fp_y = @last_y[1]
      offset = 8 * 32
      fp_index_by_kind = fp_index + offset * @fp_id
      $scene.spriteset.show_footprints( fp_index_by_kind, fp_x, fp_y ) 
    end
  end
end
#==============================================================================
# ** Game_Event
#==============================================================================
class Game_Event
  #--------------------------------------------------------------------------
  # * Alias
  #--------------------------------------------------------------------------
  alias_method( :org_refresh_wo_footprints, :refresh )
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    old_list = @list
    org_refresh_wo_footprints
    if old_list != @list
      # Reset fp_id to default
      @fp_id = 0
      # Check fp_id tags
      if check_comments( /<nofp>/i )
        @fp_id = nil
      else
        match = check_comments( /<fp id=(\d+)\/>/i )
        if match
          @fp_id = match[1].to_i
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Check Comments for RegExp and return MatchData or nil
  #--------------------------------------------------------------------------
  def check_comments( regexp )
    for command in @list
      if command.code == 108 or command.code == 408
        if regexp =~ command.parameters[0]
          return Regexp.last_match
        end
      end
    end
    return nil
  end
end
zum Lesen den Text mit der Maus markieren



Zitat

Edit: Mir ist noch aufgefallen, als ich nun mit untransparenten FPs gearbeitet habe, dass die Priority offenbar nicht so richtig funktioniert. Teilweise sieht man die FPs auf dem Kopf des Protas und manchmal schimmern sie nur durch. Das hat aber glaub ich nix mit deinem Add-On zu tun. Und ich weiß auch nicht, ob das wichtig ist zu regeln, denn bei TRansparenten FPs sieht man das ja kaum.

Konnte ich jetzt nicht reproduzieren. Benutzt Du vielleicht einen Tilemaprewrite? Habe trotzdem mal etwas am AddOn angepasst, vielleicht reicht das schon.

Josey

Storyteller

  • »Josey« ist der Autor dieses Themas

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

7

Samstag, 28. März 2015, 08:42

Zitat

Konnte ich jetzt nicht reproduzieren. Benutzt Du vielleicht einen Tilemaprewrite?

Yep :3
Ich hab doch da dieses RGSS3-Spiel XD

Also: In einem RGSS1-Spiel läuft alles ganz wunderbar! :D

Aber mein RGSS3-Spiel spuckt mir unten angehangenen Fehler aus :<
Neben einem Tilemaprewrite habe ich da einen Haufen anderer Sachen drin.
...
In einem reinen RGSS3-Spiele ohne weitere Scripte läuft alles (Priority-Problem ist immer noch da, wird man wohl aber nicht sehen).
Tatsächlich gabs eine Zeile, die in meinem FP-Script geändert wurde. (Zeile 228 @fp_tilemap.priorities = Table.new(8*32) ist neu, damit es mit dem Tilemap-Rewrite kompatibel ist). Aber daran liegts nicht, denn da läuft ja jetzt alles.

Komisch, die erste Add-On-Version lief noch ohne Probleme.
Der Fehler tritt auch auf, wenn ich die Position des Add-On-Scripts verändere, also es ganz runter direkt über Main schiebe oder es weiter hoch tue. Keine Änderung.


So. Jetzt hab ichs. Es liegt tatsächllich nicht direkt an einem Script, aber irgendwie schon. Wie ich vermutete, nachdem ichd as Tilemaprewrite ausgeschlossen hatte, liegt es an meinen Partymemberfollowern. Und zwar nicht direkt am Script, denn an sich kann ich das Spiel starten. Will ich aber auf eine Map, wo es Partymember gibt (also sie nur existieren, sie müssen nichtmal laufen!) kackt alles ab.
Vielleicht liegt es daran, dass du das mit den Eventnamen überschrieben hast? Die Partymember laufen teilweise mit Eventnamen (weil ich ja per CE auf sie zugreife, sie aber nicht auf jeder Map dieselbe Eventnummer haben).

Soll ich dir eine abgespeckte Demo schicken? D:


Nebeninfo:
Du hast "event = get_chatacter(17)" statt "event = get_character(17)" in der Beschreibung stehen (und ich habs nciht sofort gemerkt und bekam schon Panik XD)
»Josey« hat folgendes Bild angehängt:
  • Fehler.png
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

8

Sonntag, 29. März 2015, 01:43

Rechtschreibfehler gefixt und eine Ausnahmebehandlung hinzugefügt:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#==============================================================================
# ** Dynamic Footprints AddOn für Josey
#==============================================================================
#  Original Dynamic Footprints Skript in Version 1.0 by Wachunga
#  
#  Fügt die Option hinzu mehrere verschiedene Fußabdrücke zu verwenden.
#  Dafür werden unten einfach mehrere Dateinamen angegeben, die im Tileset-
#  Ordner liegen müssen.
#  
#  Schreibt in ein Eventkommentar
#    <fp id=1/>
#  um einem Event andere Fußabdrücke zu geben, oder
#    <nofp>
#  damit das Event keine Fußabdrücke hinterlässt. Der Eventname wird nichtmehr
#  berücksichtigt.
#  Ihr könnt auch für beliebige Figuren der Map (auch für den Spieler) per
#  Skriptbefehl die zu verwendenden Abdrücke wählen.
#  Holt euch erstmal mit get_character(id) das Event Nummer 17 oder den Helden
#    player = get_character(-1)
#    event  = get_character(17)
#  Dann via .fp_id=X die fp_id ändern:
#    player.fp_id = nil
#    event.fp_id = 3
#  Nun hinterlässt der Spieler keine Fußabdrücke mehr, und das Event Nummer 17
#  hinterlässt entsprechende Abdrücke, zur fp_id 3.
#------------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Mar 2015
#  Maker: RPG Maker XP
#  Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** Konfiguration
#==============================================================================
# Es werden Fußabdrücke für sechs Situationen (unten->oben, links->rechts,
# rechts->links, links->oben, oben->rechts und rechts->runter) benötigt
# (zwölf, wenn die Richtung wichtig ist). Siehe das beigelegte 
# footprint template für spezifische Details. Die Rechte Hälfte wird nur
# benötigt, wenn FP_DIRECTIONAL auf true steht.
# Liste hier die einzelnen zu verwendenden Dateien auf:
FP_FILE = ["footprints_default",    # fp_id 0 (Standard)
           "footprints_default3",   # fp_id 1
           "footprints_monster",    # fp_id 2
           "footprints_default2"    # fp_id 3
          ]
#==============================================================================
# ** Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Setup FP Tileset
  #--------------------------------------------------------------------------
  def setup_fp_tileset
    fp_tileset = Bitmap.new(256,1024 * FP_FILE.size)
    # make a column for each footprint image
    FP_FILE.each_with_index do |name, i|
      y = 1024 * i
      # right -> down
      fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new( 0,  0, 32, 32))
      # up -> right
      fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new( 0, 32, 32, 32))
      # left -> right
      fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new( 0, 64, 32, 32))
      # down -> left
      fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(32,  0, 32, 32))
      # left -> up
      fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(32, 32, 32, 32))
      # down -> up
      fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(32, 64, 32, 32))
    end
    # fill out each column, making copies of the image with decreasing opacity
    FP_FILE.size.times do |i|
      offset = i * 1024
      for col in 0..5
        opacity = 255
        for row in 0..15
          dx = col * 32
          dy = row * 32 + offset
          fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
          opacity -= 16
        end
      end
    end
    # Draw Directional Parts
    if FP_DIRECTIONAL
      FP_FILE.each_with_index do |name, i|
        y = 1024 * i + 512
        # down -> right
        fp_tileset.blt(160, y, RPG::Cache.tileset(name), Rect.new(64, 0, 32, 32))
        # right -> up
        fp_tileset.blt(128, y, RPG::Cache.tileset(name), Rect.new(64, 32, 32, 32))   
        # right -> left
        fp_tileset.blt( 32, y, RPG::Cache.tileset(name), Rect.new(64, 64, 32, 32))    
        # left -> down
        fp_tileset.blt( 64, y, RPG::Cache.tileset(name), Rect.new(96,  0, 32, 32))
        # up -> left
        fp_tileset.blt( 96, y, RPG::Cache.tileset(name), Rect.new(96, 32, 32, 32))   
        # up -> down
        fp_tileset.blt(  0, y, RPG::Cache.tileset(name), Rect.new(96, 64, 32, 32))
      end
      # Fill Columns
      FP_FILE.size.times do |i|
        offset = i * 1024 + 512
        for col in 0..5
          opacity = 255
          for row in 0..16
            dx = col * 32
            dy = row * 32 + offset
            fp_tileset.blt( dx, dy, fp_tileset, Rect.new(dx, offset, 32, 32), opacity)
            opacity -= 16
          end
        end
      end
    end
    return fp_tileset
  end
  #--------------------------------------------------------------------------
  # * Initialisation
  #--------------------------------------------------------------------------
  def initialize
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
                                               $game_screen.pictures[i] ) )
    end
    @timer_sprite = Sprite_Timer.new
    # Dynamic Footprints additions begin
    @footprints = []
    @fp_tilemap = Tilemap.new(@viewport1)   
    @fp_tilemap.tileset = setup_fp_tileset
    @fp_tilemap.map_data = Table.new($game_map.width, $game_map.height, 3)
    @fp_tilemap.priorities = Table.new(8*32*FP_FILE.size)
    # end Dynamic Footprints additions
    update
  end
end
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # * Attr
  #--------------------------------------------------------------------------
  attr_accessor( :fp_id )
  #--------------------------------------------------------------------------
  # * Overwrite original footprints Method from Wachunga
  #--------------------------------------------------------------------------
  def footprints
    # determine which prints to draw and where
    if terrain_tag(@last_x[1],@last_y[1]) != FP_TAG
      return
    end
    fp_index = nil
    # left
    if @x > @last_x[1]
      if @last_y[1] > @last_y[0]
        fp_index = FP_UR
      elsif @last_y[1] < @last_y[0]
        fp_index = FP_DIRECTIONAL ? FP_DR : FP_RD
      else
        fp_index = FP_LR
      end
    else
      # right
      if @x < @last_x[1]
        if @last_y[1] > @last_y[0]
          fp_index = FP_DIRECTIONAL ? FP_UL : FP_LU
        elsif @last_y[1] < @last_y[0]
          fp_index = FP_DL
        else
          fp_index = FP_DIRECTIONAL ? FP_RL : FP_LR
        end
      else
        # up
        if @y < @last_y[1]
          if @last_x[1] > @last_x[0]
            fp_index = FP_LU
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_RU : FP_UR
           else
            fp_index = FP_DU
          end
        # down
        elsif @y > @last_y[1]
         if @last_x[1] > @last_x[0]
            fp_index = FP_DIRECTIONAL ? FP_LD : FP_DL
          elsif @last_x[1] < @last_x[0]
            fp_index = FP_RD
          else
           fp_index = FP_DIRECTIONAL ? FP_UD : FP_DU
          end
        end
      end
    end
    if fp_index != nil
      fp_x = @last_x[1]
      fp_y = @last_y[1]
      offset = 8 * 32
      fp_index_by_kind = fp_index + offset * @fp_id
      $scene.spriteset.show_footprints( fp_index_by_kind, fp_x, fp_y ) 
    end
  end
end
#==============================================================================
# ** Game_Event
#==============================================================================
class Game_Event
  #--------------------------------------------------------------------------
  # * Alias
  #--------------------------------------------------------------------------
  alias_method( :org_refresh_wo_footprints, :refresh )
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    old_list = @list
    org_refresh_wo_footprints
    if old_list != @list
      # Reset fp_id to default
      @fp_id = 0
      # Check fp_id tags
      if check_comments( /<nofp>/i )
        @fp_id = nil
      else
        match = check_comments( /<fp id=(\d+)\/>/i )
        if match
          @fp_id = match[1].to_i
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Check Comments for RegExp and return MatchData or nil
  #--------------------------------------------------------------------------
  def check_comments( regexp )
    return nil unless @list
    for command in @list
      if command.code == 108 or command.code == 408
        if regexp =~ command.parameters[0]
          return Regexp.last_match
        end
      end
    end
    return nil
  end
end
zum Lesen den Text mit der Maus markieren

Die neue Version sollte das Problem nicht haben. Falls doch, muss ich nochmal genauer drübergucken. :arbeit.arbeit:

Josey

Storyteller

  • »Josey« ist der Autor dieses Themas

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

9

Sonntag, 29. März 2015, 16:16

Vielen Dank, Playm :D
Es funktioniert wieder. Das umschalten zwischen den FPs und die Comment-Funktion für Events, alles ist ganz wunderbar!
Dankeschön! :D
Ich freu mich schon drauf, sämtlichen Viehzeugs FPs im Sand zu geben, mal schaun, ab wievielen es beginnt zu laggen >XD

Die Priority-Sache ist immer noch da- das hat aber überhaupt nichts mit deinem Add-On zu tun, sondern mit dem RGSS3 (vielleicht sogar nur mit dem Tilemaprewrite, dass ich verwenden, mit einem anderen Rewrite wollten die FPs gar nicht laufen). Man sieht es auch nur, wenn man die FPs nicht transparent macht, sonst wär mir das schon vorher aufgefallen :3
Für den Fall, dass du es dir mal ansehen möchtest (oder jemand anderer) hier eine kleine (6000KB) Demo (ohne dein Add-On, weil es nicht an diesem liegt- wenn du aber drei weitere FPs einfügst oder in den Einstellungen deines Scripts die anderen FPs rausnimmst, kannst du es ohne Probleme reinkopieren). Wenn man da mit dem Charakterkopf durch FPs läuft, sind die FPs auf dem Kopf, statt darunter. Die FPs sind auch nur eine Skizze, sie sehen noch furchtbar aus und sind total unlogisch (so kleine Trippelschritte würde so was Großes nie machen XD).


Vielen vielen Dank, die FP-Wechselei wird mir sehr viel Freude bereiten :D
Danke, dass du alle Probleme mit meinen anderen Scripts ausgebügelt hast! :3
»Josey« hat folgende Datei angehängt:
  • demo.rar (6,77 MB - 1 mal heruntergeladen - zuletzt: 27. Dezember 2016, 16:48)
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.