Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

1

Donnerstag, 31. Januar 2013, 18:29

Kompatiblitätsproblem:Yggdrasil Icon Attack und SwapXT

Liebe Community,

ich habe jetzt für mein Spiel ein neues Kampfsystem implementiert, welches leider nicht
mit SwapXT (Tool zum Tileset-Wechsel) kompatibel zu sein scheint.
Der unten gepostete Fehler erscheint entweder beim Starten des Spiels mit Player-Start-Point
auf einer Map mit getauschten Tilesets oder beim Eventbefehl "Transfer Map", wird alles
schwarz geladen bzw alle Bilder sind schwarz außer dem Spieler...

Die Fehlermeldung ist im Anhang hier auch die Skripte:
SwapXT:
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
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
=begin
                                SwapXT
 
Version: 1.1
Author: Marco Di Antonio (bulletxt@gmail.com)
Nickname: BulletXt
Date: 30/10/2011
 
This is SwapXT script that must be put in your VX game script section.
It's Plug&Play.
Use SwapXT application to do swaps once you put this into your VX game.
 
 
Changelog History:
1.1 30/10/2011
- crash occured when doing real time swap with passage setting set to Default
 
1.0  14/07/2010
- first release
 
 
=end
 
 
############################# CONFIGURATION ####################################
 
#Switch ID.
#If ON, your events will not swap according to tiles and will use default tiles.
DISABLE_EVENT_SWAPPING = 100
 
 
=begin
IGNORE the following two switches IDs unless you are using
old 0.4 swapping script found at:
http://lodestone2d.svn.sourceforge.net/viewvc/lodestone2d/Scripts-Dev/Swap_TileSet/Swap_tile_new_passage_setting.rb .
If you are, set the 2 ID switches to ensure compatibility
with your current "old system" swaps.
The meaning of these two switches are described on the old 0.4 script, and you
should already have confidence with them if you need these.
=end
SWAP_TILE = 9999
LOAD_PASSAGE_SETTING = 9998
 
 
########################## END CONFIGURATION ###################################
 
 
#==============================================================================
# ** Cache
 
module Cache_Swap_Tiles
 
  #error message in case user is swapping tiles
  #on a map with both old and new system
  def self.error_message(map_id)
  $bulletxt_error_message_mixed_swapping_configuration = "BulletXt Message:
 on this map ID " + map_id.to_s() + "
 you have a dangerous configuration.
 You are swapping tilesets from events and from the swapping application.
 Mixed configuration is not allowed.
 Please decide which system to use to swap your tiles.
 I highly suggest to swap tilesets using the swapping application.
 If you decide to do this, please be sure you turn off the swapping switch
 ID " + SWAP_TILE.to_s() + " before entering this map.
 I will close the game for security reasons."  
  #get rid of \n
  array = $bulletxt_error_message_mixed_swapping_configuration.split("\n")
  size = array.length()
  n = 0
  f = ""
  while n < size do
    message = array[n]
    f = f + message
    n = n + 1
  end
  $bulletxt_error_message_mixed_swapping_configuration = f
  end
 
  #error message in case user is swapping passage settings
  #on a map with both old and new system
  def self.error_message_passage(map_id)
  $bulletxt_error_message_mixed_swapping_configuration = "BulletXt Message:
 on this map ID " + map_id.to_s() + "
 you have a dangerous configuration.
 You are swapping a passage settings from events and from the swapping application.
 Mixed configuration is not allowed.
 Please decide which system to use to swap your passage settings.
 I highly suggest to swap passage settings using the swapping application.
 If you decide to do this, please be sure you turn off the swapping passage
 setting switch ID " + LOAD_PASSAGE_SETTING.to_s() + " before entering this map.
 I will close the game for security reasons."  
  #get rid of \n
  array = $bulletxt_error_message_mixed_swapping_configuration.split("\n")
  size = array.length()
  n = 0
  f = ""
  while n < size do
    message = array[n]
    f = f + message
    n = n + 1
  end
  $bulletxt_error_message_mixed_swapping_configuration = f
  end  
 
 
  #--------------------------------------------------------------------------
  # * Get Character Graphic
  #     filename : Filename
  #--------------------------------------------------------------------------
  def self.swap(filename)
    load_bitmap("Graphics/System/extra_tiles/", filename)
  end
 
  #--------------------------------------------------------------------------
  # * Clear Cache
  #--------------------------------------------------------------------------
  def self.clear
    @cache = {} if @cache == nil
    @cache.clear
    GC.start
  end
  #--------------------------------------------------------------------------
  # * Load Bitmap
  #--------------------------------------------------------------------------
  def self.load_bitmap(folder_name, filename, hue = 0)
    @cache = {} if @cache == nil
    path = folder_name + filename
    if not @cache.include?(path) or @cache[path].disposed?
      if filename.empty?
        @cache[path] = Bitmap.new(32, 32)
      else
        @cache[path] = Bitmap.new(path)
      end
    end
    if hue == 0
      return @cache[path]
    else
      key = [path, hue]
      if not @cache.include?(key) or @cache[key].disposed?
        @cache[key] = @cache[path].clone
        @cache[key].hue_change(hue)
      end
      return @cache[key]
    end
  end
end
 
 
################################################################################
 
 
 
############ CHECK IF THERE ARE SWAPPED TILES AT START PLAY TIME ###############
=begin
We must ensure user is starting game and there are physically swapped tiles or
passage settings,
tiles that have been for example swapped from the application
=end
class Scene_Title < Scene_Base
 
  alias swapxt_start start
  def start
    swapxt_start
    check_if_tileset_swapped_exist
    check_if_passage_swapped_exist
  end
 
  def check_if_tileset_swapped_exist
    tile = "Graphics/System/swapped_"
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A1.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A2.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A3.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A4.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A5.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "B.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "C.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "D.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "E.png")
  end
 
  def tileset_swap_loaded_message_error
    p sprintf("SwapXT Error: You are not allowed to start your game with swapped tilesets. You must unload your tilesets with SwapXT application first. Open SwapXT, click at top Tools->Restore all Tilesets")
    exit
  end
 
  def check_if_passage_swapped_exist
    passage = "swapxt/passage_warning.stx"
    passage_swap_loaded_message_error if FileTest.exist?(passage)
  end
 
  def passage_swap_loaded_message_error
    p sprintf("SwapXT Error: You are not allowed to start your game with swapped passage settings. You must unload your passage setting with SwapXT application first. Open SwapXT, go on PassageSetting tab and click on Restore to Default.")
    exit
  end
 
end
################################################################################
 
 
 
=begin
this class takes care of checking if there is a map id file. this class does
not swap tilesets but only prepares the tiles variables(if map id file found).
this class handles loading the passage setting file, for both old and
new system
=end
 
class Game_Map
  include Cache_Swap_Tiles  
  alias bulletxt_goodbye_vx_limit_tile_setup setup
  def setup(map_id)
 
    #must be false at load time
    $swapxt_realtime = false
 
    #this variable must always be false at runtime.
    #becomes true only if it finds a map id file
    $swap_tileset_profile_bulletxt = false
 
    #check if it must load a saved profile TILESET for this map id
    profile_path_tile = "swapxt/tiles/" + map_id.to_s() + ".stx"
    if FileTest.exist?(profile_path_tile)
      #we must now check if user isn't fooling around with his configuration.
      #he must not be swapping tiles on this map with old and new system
      #at the same time. if this is the case, warn him we don't want issues and
      #close the game
      if $game_switches[SWAP_TILE] == true
        Cache_Swap_Tiles.error_message(map_id)
        p sprintf($bulletxt_error_message_mixed_swapping_configuration)
        exit
      end
      #set this to true so we know we want to swap with new system
      $swap_tileset_profile_bulletxt = true
      #p sprintf(profile_path_tile + " found!")
      #read the map id file, it has 8 lines with the name of the tileset to swap.
      #set each tileset global variable with the corresponding found line, in order.
      $tileA1,$tileA2,$tileA3,$tileA4,$tileA5,$tileB,$tileC,$tileD,$tileE = File.read(profile_path_tile).split("\n")
    end
 
 
    ##################### SWAP PASSSAGE SETTINGS ##########################
    @swap_passagesetting_bulletxt = false
    #for how this works, look at the code above
    profile_path_passages = "swapxt/passages/" + map_id.to_s() + ".stx"
    if FileTest.exist?(profile_path_passages)
      #p sprintf("passage exists on map " + map_id.to_s())
      if $game_switches[LOAD_PASSAGE_SETTING] == true
        Cache_Swap_Tiles.error_message_passage(map_id)
        p sprintf($bulletxt_error_message_mixed_swapping_configuration)
        exit
      end
      @swap_passagesetting_bulletxt = true
      $swap_passages = (File.read(profile_path_passages).split("\n"))[0]
    end
 
 
    #checks if it should load default passage setting, both for old and new system
    if $game_switches[LOAD_PASSAGE_SETTING] == false and @swap_passagesetting_bulletxt == false
      bulletxt_goodbye_vx_limit_tile_setup(map_id)
      $swap_passages = nil
      return  
    end
 
 
    path = "Graphics/System/extra_tiles/" + $swap_passages.to_s() + ".rvdata" rescue nil
 
    #check if user set $swap_passages to nil cause he wants to load default setting.
    #if user is loading with new system checks if it's equal to empty::*::
    if $swap_passages == nil or $swap_passages == "empty::*::"
      bulletxt_goodbye_vx_limit_tile_setup(map_id)
      return
    end
 
 
    #when here, we are sure user wants to swap passage setting, either
    #via old system or new system
    #the file to swap is not default one, he wants to swap to a real new one
    @map_id = map_id
    @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
    @display_x = 0
    @display_y = 0
 
    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages
 
    #default vx code
    referesh_vehicles
    setup_events
    setup_scroll
    setup_parallax
    @need_refresh = false
  end
 
 
############################# REAL TIME SWAPS ##################################  
  #if here, player has done a $game_map.tileset call. It must reload
  #map with new passage setting (if it exists) and upate map.
  #OLD SYSTEM
  def tileset
    #if false, we must update and load default passage
    if $game_switches[LOAD_PASSAGE_SETTING] == false
      @passages = $data_system.passages
    else
      #if nil, must reset passage setting to default  
      if $swap_passages == nil
        @passages = $data_system.passages
        $scene = Scene_Map.new
        return
      end
    path = "Graphics/System/extra_tiles/" + $swap_passages + ".rvdata" rescue nil
    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages
    end  
    #this updates the map tiles. it does not modify events or anything else.
    $scene = Scene_Map.new
  end
 
 
 
  #if here, player has done a $game_map.swapxt() call. It must reload
  #map with new passage setting (if it exists) and upate map.
  #NEW SWAPXT SYSTEM
  def swapxt(integer)
    rtx_path = "swapxt/realtime/" + integer.to_s() + ".rtx"
    if !FileTest.exist?(rtx_path )
      p sprintf("SwapXT Error: You have called $game_map.swapxt(" + integer.to_s() + ") , but that Real-Time swap doesn't exist. Please better check it inside SwapXT app, under the Real-Time section.")
      exit
    end
    $tileA1,$tileA2,$tileA3,$tileA4,$tileA5,$tileB,$tileC,$tileD,$tileE,passage = File.read(rtx_path).split("\n")
    path = "Graphics/System/extra_tiles/" + passage + ".rvdata" rescue nil
    if !FileTest.exist?(path)
      path = "Data/System.rvdata"
    end
    $swapxt_realtime = true #warning,realtime update must occur
    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages
    #this updates the map tiles. it does not modify events or anything else.
    $scene = Scene_Map.new
  end
 
 
end
 
 
#this class handles loading tilesets
class Spriteset_Map
include Cache_Swap_Tiles  
 
  alias bulletxt_lodestone_create_tilemap create_tilemap
  def create_tilemap
    #if true, it means the map doesn't have to load tilesets,
    #neither for old swapping system or new system.
    #if true, also means no realtime update occured
    #it must load DEFAULT tilesets
    if $game_switches[SWAP_TILE] == false and $swap_tileset_profile_bulletxt == false and $swapxt_realtime == false
      bulletxt_lodestone_create_tilemap
      $tileA1 = nil
      $tileA2 = nil
      $tileA3 = nil
      $tileA4 = nil
      $tileA5 = nil
      $tileB = nil
      $tileC = nil
      $tileD = nil
      $tileE = nil
      return
    end
 
 
 
=begin
calling the original function is a trick. if there are tiles to swap
it will just replace them, otherwise if a tile is nil it won't swap anything,
but still the tile will be loaded because it has already loaded the original tile
when calling this function. in other words, if setting a tile$n = nil will simply
make the script load default tile.
=end
    bulletxt_lodestone_create_tilemap
=begin
when here, some/all tiles must be swapped, either old or with new system.
the tile can be equal to "empty::*::" only if it found the file id of the
map and line$n is equal to empty::*::. in that case it must load default tileset.
there are no chances a user with old system is swapping a tileset named
"empty::*::" because you can't name files with ":" characters under
Microsoft Windows OS.
=end
    path_to_graphic = "extra_tiles/"
 
    #tileA1
    if $tileA1 == "empty::*::"
      @tilemap.bitmaps[0] = Cache.system("TileA1")
    else
      tile1 = Cache_Swap_Tiles.swap($tileA1 + ".png") rescue nil
      @tilemap.bitmaps[0] = tile1 if $tileA1 != nil
    end
 
    #tileA2
    if $tileA2 == "empty::*::"
      @tilemap.bitmaps[1] = Cache.system("TileA2")
    else
      tile2 = Cache_Swap_Tiles.swap($tileA2 + ".png") rescue nil
      @tilemap.bitmaps[1] = tile2 if $tileA2 != nil
    end
 
    #tileA3
    if $tileA3 == "empty::*::"
      @tilemap.bitmaps[2] = Cache.system("TileA3")
    else
      tile3 = Cache_Swap_Tiles.swap($tileA3 + ".png") rescue nil
      @tilemap.bitmaps[2] = tile3 if $tileA3 != nil
    end
 
    #tileA4
    if $tileA4 == "empty::*::"
      @tilemap.bitmaps[3] = Cache.system("TileA4")
    else
      tile4 = Cache_Swap_Tiles.swap($tileA4 + ".png") rescue nil
      @tilemap.bitmaps[3] = tile4 if $tileA4 != nil
    end
 
    #tileA5
    if $tileA5 == "empty::*::"
      @tilemap.bitmaps[4] = Cache.system("TileA5")
    else
      tile5 = Cache_Swap_Tiles.swap($tileA5 + ".png") rescue nil
      @tilemap.bitmaps[4] = tile5 if $tileA5 != nil
    end
 
    #tileB
    if $tileB == "empty::*::"
      @tilemap.bitmaps[5] = Cache.system("TileB")
    else
      tile6 = Cache_Swap_Tiles.swap($tileB + ".png") rescue nil
      @tilemap.bitmaps[5] = tile6 if $tileB != nil
    end
 
    #tileC
    if $tileC == "empty::*::"
      @tilemap.bitmaps[6] = Cache.system("TileC")
    else
      tile7 = Cache_Swap_Tiles.swap($tileC + ".png") rescue nil
      @tilemap.bitmaps[6] = tile7 if $tileC != nil
    end
 
    #tileD
    if $tileD == "empty::*::"
      @tilemap.bitmaps[7] = Cache.system("TileD")
    else
      tile8 = Cache_Swap_Tiles.swap($tileD + ".png") rescue nil
      @tilemap.bitmaps[7] = tile8 if $tileD != nil
    end
 
    #tileE
    if $tileE == "empty::*::"
      @tilemap.bitmaps[8] = Cache.system("TileE")
    else
      tile9 = Cache_Swap_Tiles.swap($tileE + ".png") rescue nil
      @tilemap.bitmaps[8] = tile9 if $tileE != nil
    end
 
  #closes def
  end
#closes class
end
 
 
########################## SWAP EVENT'S GRAPHICS #############################
#the following class handles swapping event's graphics according to the tiles
class Sprite_Character < Sprite_Base
include Cache_Swap_Tiles
 
  alias swap_tileset_bitmap tileset_bitmap
  def tileset_bitmap(tile_id)
     #do not swap events if true
     if $game_switches[DISABLE_EVENT_SWAPPING]
        set_number = tile_id / 256
        return Cache.system("TileB") if set_number == 0
        return Cache.system("TileC") if set_number == 1
        return Cache.system("TileD") if set_number == 2
        return Cache.system("TileE") if set_number == 3
        return nil
        return
     end
 
     if $game_switches[SWAP_TILE] == false and $swap_tileset_profile_bulletxt == false and $swapxt_realtime == false
        set_number = tile_id / 256
        return Cache.system("TileB") if set_number == 0
        return Cache.system("TileC") if set_number == 1
        return Cache.system("TileD") if set_number == 2
        return Cache.system("TileE") if set_number == 3
        return nil
        return
     end
 
    swap_tileset_bitmap(tile_id)
    set_number = tile_id / 256
 
    if $tileB == "empty::*::"
      return Cache.system("TileB") if set_number == 0
    else
      return Cache_Swap_Tiles.swap($tileB) if set_number == 0 rescue nil
    end
 
    if $tileC == "empty::*::"
      return Cache.system("TileC") if set_number == 1
    else
      return Cache_Swap_Tiles.swap($tileC) if set_number == 1 rescue nil
    end
 
    if $tileD == "empty::*::"
      return Cache.system("TileD") if set_number == 2
    else
      return Cache_Swap_Tiles.swap($tileD) if set_number == 2 rescue nil
    end
 
    if $tileE == "empty::*::"
      return Cache.system("TileE") if set_number == 3
    else
       return Cache_Swap_Tiles.swap($tileE) if set_number == 3 rescue nil
    end
 
    return nil
  end
end
 
 
 
=begin
saves tiles and passage setting variables,
needed if you save on a map that has swapped stuff.
this is only needed when using old system, because new system
reads the value from the map id file
=end
class Scene_File < Scene_Base
  alias bulletxt_swap_tiles_write_save_data write_save_data
  def write_save_data(file)
    bulletxt_swap_tiles_write_save_data(file)
    Marshal.dump($tileA1,      file)
    Marshal.dump($tileA2,      file)
    Marshal.dump($tileA3,      file)
    Marshal.dump($tileA4,      file)
    Marshal.dump($tileA5,      file)
    Marshal.dump($tileB,      file)
    Marshal.dump($tileC,      file)
    Marshal.dump($tileD,      file)
    Marshal.dump($tileE,      file)
    Marshal.dump($swap_passages.to_s(),   file)
    Marshal.dump($swap_tileset_profile_bulletxt,  file)
    Marshal.dump($swapxt_realtime, file)
  end  
 
  alias bulletxt_swap_tiles_read_save_data read_save_data
  def read_save_data(file)
    bulletxt_swap_tiles_read_save_data(file)
    $tileA1        = Marshal.load(file)
    $tileA2        = Marshal.load(file)
    $tileA3        = Marshal.load(file)
    $tileA4        = Marshal.load(file)
    $tileA5        = Marshal.load(file)
    $tileB        = Marshal.load(file)
    $tileC        = Marshal.load(file)
    $tileD        = Marshal.load(file)
    $tileE        = Marshal.load(file)
    $swap_passages = Marshal.load(file)
    $swap_tileset_profile_bulletxt = Marshal.load(file)
    $swapxt_realtime = Marshal.load(file)
  end
 
end
zum Lesen den Text mit der Maus markieren


Der Ausschnitt aus dem Bereich von Yggdrasil an dem die Probleme entstehen:
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
# Create By IceDragon
# Credit to Yanfly for SpriteIcon 
# Date Created  ??/??/2011
# Date Modified 02/20/2011
# Version 0.6 # << Works though.
# V0.5 - Finished Script
# V0.6 - Fixed Rotation, retardation (:3)
#===============================================================================
# Sprite_Character
#===============================================================================
class Sprite_Character < Sprite_Base
 
  ICON_MOVE_SPEED = 12 # Above 10, fast enough not to stick.
  ICON_SWING_ANGLE = 108 # There is a slight bug with this, the angle must be
                         # divisable by the speed leaving no remainder
                         # else some AWESOME Spinning action happens. << WHICH IS NOT GOOD
  RESET_COUNT = 3 # If the angle doesn't change for x amount reset icon
 
end  
#===============================================================================
# IEX_YGG_Sprite_Icon - Copied from BEM
#===============================================================================
 
class IEX_YGG_Sprite_Icon < Sprite_Base
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :battler
  attr_accessor :icon
  attr_accessor :offset_x
  attr_accessor :offset_y
  attr_accessor :offset_z
  attr_accessor :same_angle_count
  attr_accessor :direction
 
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport, icon, parent)
    super(viewport)
    @parent = parent
    @icon = icon
    @attach_x = 0
    @attach_y = 0
    @offset_x = 0
    @offset_y = 0
    @offset_z = 0
    create_icon_bitmap
    @last_angle = 0
    @same_angle_count = 0
    @direction = 2
  end
 
  #--------------------------------------------------------------------------
  # dispose
  #--------------------------------------------------------------------------
  def dispose
    super
  end
 
  def set_icon(icon)
    @icon = icon
    self.src_rect.set(@icon % 16 * 24, @icon / 16 * 24, 24, 24)
  end  
  #--------------------------------------------------------------------------
  # create_icon_bitmap
  #--------------------------------------------------------------------------
  def create_icon_bitmap
    return if @icon == nil
    self.bitmap = Cache.system("Iconset")
    self.src_rect.set(@icon % 16 * 24, @icon / 16 * 24, 24, 24)
  end
 
  #--------------------------------------------------------------------------
  # set_origin
  #--------------------------------------------------------------------------
  def set_origin(type)
    @offset_z = 2
    @attachment = type
    case type
    when :item
      self.ox = 12
      self.oy = 12
      @offset_y = -@parent.bitmap.height
      @offset_x = -@parent.bitmap.width / 2
    when :hand1
      self.ox = 24
      self.oy = 24
      @attach_y = -@parent.bitmap.height/3
      @attach_x = -@parent.bitmap.width/5
    when :hand2
      self.ox = 24
      self.oy = 24
      @attach_y = -@parent.bitmap.height/3
      @attach_x = @parent.bitmap.width/5
    when :middle
      self.ox = 12
      self.oy = 12
      @offset_y = -@parent.bitmap.height/2
    when :top
      self.ox = 12
      self.oy = 24
      @offset_y = -@parent.bitmap.height
    when :base
      self.ox = 12
      self.oy = 24
    end
  end
 
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------
  def update
    super
    update_rotate
    update_opacity
    update_move
    update_position
    self.visible = self.angle != 0
    if @last_angle == self.angle
      @same_angle_count += 1
    else
      @same_angle_count = 0
    end  
    @last_angle = self.angle
    case @direction
    when 2, 6 ; @offset_z = @parent.z
    when 4, 8 ; @offset_z = -10
    end  
  end
 
  #--------------------------------------------------------------------------
  # update_position
  #--------------------------------------------------------------------------
  def update_position
    if @parent != nil
      self.mirror = mirror_battler?
      update_attachment(self.mirror)
      attach_x = self.mirror ? -@attach_x : @attach_x
      attach_x = self.mirror ? -@attach_x : @attach_x
      self.x = @parent.x + attach_x + @offset_x
      self.y = @parent.y + @attach_y + @offset_y
      self.z = @parent.z + @offset_z - 1
    else
      self.x = @offset_x
      self.y = @offset_y
      self.z = @offset_z
    end 
  end
 
  #--------------------------------------------------------------------------
  # update_attachment
  #--------------------------------------------------------------------------
  def update_attachment(mirror = false)
    case @attachment
    when :hand1
      self.ox = mirror ? 0 : 24
      self.oy = 24
      @attach_y = -8 #-@parent.bitmap.height/3
      @attach_x = -4 #-@parent.bitmap.width/5
    when :hand2
      self.ox = mirror ? 0 : 24
      self.oy = 24
      @attach_y = -8 #-@parent.bitmap.height/3
      @attach_x = 0 #@parent.bitmap.width/5
    else
      @attach_x = 0
      @attach_y = 0
    end
  end
 
  #--------------------------------------------------------------------------
  # mirror_battler?
  #--------------------------------------------------------------------------
  def mirror_battler?
    if @parent.character != nil
      case @direction
      when 2, 6
        return true 
      end  
    end  
    return false
  end
 
  #--------------------------------------------------------------------------
  # reset_angle
  #--------------------------------------------------------------------------
  def reset_angle
    self.angle    = 0
    @rotate_angle = 0
    @turn_angle   = 0
    @rotate_speed = 0
  end
 
  #--------------------------------------------------------------------------
  # rotate
  #--------------------------------------------------------------------------
  def rotate(set_angle, set_speed, clockwise = false)
    @rotate_angle = set_angle
    @turn_angle = 0
    @rotate_speed = set_speed
    @clockwise = clockwise
  end
 
  #--------------------------------------------------------------------------
  # update_rotate
  #--------------------------------------------------------------------------
  def update_rotate
    return if @rotate_angle == nil
    clockwise = @clockwise
    clockwise = !clockwise if self.mirror
    self.angle += clockwise ? -@rotate_speed : @rotate_speed
    @turn_angle += @rotate_speed
    if @rotate_angle.is_a?(Integer) and @turn_angle >= @rotate_angle
      @rotate_angle = nil
    end
  end
 
  #--------------------------------------------------------------------------
  # opacity_rate
  #--------------------------------------------------------------------------
  def opacity_rate(rate); @opacity_rate = rate; end
 
  #--------------------------------------------------------------------------
  # update_opacity
  #--------------------------------------------------------------------------
  def update_opacity
    return if @opacity_rate == nil or @opacity_rate == 0
    self.opacity += @opacity_rate
  end
 
  #--------------------------------------------------------------------------
  # move_direction
  #--------------------------------------------------------------------------
  def move_direction(direction, speed, frames)
    case direction
    when 1 # Down Left
      @move_2 = @move_4 = speed
      @move_2_count  = @move_4_count  = 0
      @move_2_frames = @move_4_frames = frames
    when 2 # Down
      @move_2 = speed
      @move_2_count  = 0
      @move_2_frames = frames
    when 3 # Down Right
      @move_2 = @move_6 = speed
      @move_2_count  = @move_6_count  = 0
      @move_2_frames = @move_6_frames = frames
    when 4 # Left
      @move_4 = speed
      @move_4_count  = 0
      @move_4_frames = frames
    when 6 # Right
      @move_6 = speed
      @move_6_count  = 0
      @move_6_frames = frames
    when 7 # Up Left
      @move_8 = @move_4 = speed
      @move_8_count  = @move_4_count  = 0
      @move_8_frames = @move_4_frames = frames
    when 8 # Up
      @move_8 = speed
      @move_8_count  = 0
      @move_8_frames = frames
    when 9 # Up Right
      @move_8 = @move_6 = speed
      @move_8_count  = @move_6_count  = 0
      @move_8_frames = @move_6_frames = frames
    else; return
    end
  end
 
  #--------------------------------------------------------------------------
  # update_move
  #--------------------------------------------------------------------------
  def update_move
    if @move_2 != nil # Down Move
      @offset_y += @move_2
      @move_2_count += 1
      if @move_2_count >= @move_2_frames
        @move_2 = @move_2_count = @move_2_frames = nil
      end
    end
    if @move_4 != nil # Left Move
      @offset_x -= @move_4
      @move_4_count += 1
      if @move_4_count >= @move_4_frames
        @move_4 = @move_4_count = @move_4_frames = nil
      end
    end
    if @move_6 != nil # Right Move
      @offset_x += @move_6
      @move_6_count += 1
      if @move_6_count >= @move_6_frames
        @move_6 = @move_6_count = @move_6_frames = nil
      end
    end
    if @move_8 != nil # Up Move
      @offset_y -= @move_8
      @move_8_count += 1
      if @move_8_count >= @move_8_frames
        @move_8 = @move_8_count = @move_8_frames = nil
      end
    end
  end
 
end # Sprite_Icon
 
#===============================================================================
# Sprite_Character
#===============================================================================
class Sprite_Character < Sprite_Base
 
  alias iex_ygg_spia_initialize initialize unless $@
  def initialize(*args)
    iex_ygg_spia_initialize(*args)
    @battle_icons = {}
    @battle_icons[:weapon] = IEX_YGG_Sprite_Icon.new(self.viewport, 0, self)
    @battle_icons[:weapon].set_origin(:hand1)
  end
 
  alias iex_ygg_spia_dispose dispose unless $@
  def dispose
    iex_ygg_spia_dispose
    for key in @battle_icons.keys
      ic = @battle_icons[key]
      next if ic.nil?
      ic.dispose
    end 
    @battle_icons.clear
    @battle_icons = {}
  end
 
  alias iex_ygg_spia_update update unless $@
  def update
    iex_ygg_spia_update
    if @battle_icons != nil
      for key in @battle_icons.keys
        ic = @battle_icons[key]
        next if ic.nil?
        case key
        when :weapon
          ic.reset_angle if ic.same_angle_count > RESET_COUNT
          if @character.iex_ygg_reset_icon
            ic.reset_angle
            @character.iex_ygg_reset_icon = false
          end  
          if @character.iex_ygg_attacking
            ic.direction = @character.direction
            ic.rotate(ICON_SWING_ANGLE, ICON_MOVE_SPEED)
            @character.iex_ygg_attacking = false
          end  
          if ic.angle >= ICON_SWING_ANGLE or ic.angle <= -ICON_SWING_ANGLE
            ic.rotate(ICON_SWING_ANGLE, ICON_MOVE_SPEED, true)
          end  
          ic.set_icon(@character.weapon_icon)
        end  
        ic.update
      end  
    end  
  end
 
end
 
#===============================================================================
# Game_Character
#===============================================================================
class Game_Character
 
  attr_accessor :iex_ygg_attacking
  attr_accessor :iex_ygg_reset_icon
  attr_accessor :iex_weapon_icon
 
  def weapon_icon
    @iex_weapon_icon = 0 if @iex_weapon_icon.nil?
    return @iex_weapon_icon
  end
 
  alias gchia_iex_ygg_damage_at_location iex_ygg_damage_at_location unless $@
  def iex_ygg_damage_at_location(*args)
    @iex_ygg_attacking = true
    @iex_ygg_reset_icon = true
    gchia_iex_ygg_damage_at_location(*args)
  end
 
end
 
#===============================================================================
# Game_Player
#===============================================================================
class Game_Player < Game_Character
 
  def weapon_icon
    if iex_ygg_attacker != nil
      if iex_ygg_attacker.weapons[0] != nil
        return iex_ygg_attacker.weapons[0].icon_index 
      end
    end  
    return 0
  end
 
end
zum Lesen den Text mit der Maus markieren


Von Bitmaps habe ich selbst keine Ahnung und ich habe auch keinen Ansatz, was den Fehler verursacht.
Sollte da jemand schlauer sein als ich oder noch besser eine Lösung haben, würde ich mich sehr darüber
freuen,

LG Gmork
»Gmork« hat folgendes Bild angehängt:
  • Bild 1.png
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

FlipelyFlip

unregistriert

2

Freitag, 1. Februar 2013, 03:57

das hat eigentlich nichts mit SwapXT zu tun, das Problem liegt nur im Yggdrasil Icon Attack script, da dort in der Zeile 90 die Methode height aufgerufen wird, obwohl diese nicht definiert ist für diese Klasse. Als ich mal in der Zeile 90 nachgegugt habe, stand aber nix von height drin oO
Fehlen etwas oberhalb des Scripts noch ein paar Zeilen? Ansonsten müsste man raten, welche Zeile hier nun genau gemeint is /:

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

3

Freitag, 1. Februar 2013, 13:01

Es sieht vielleicht merkwürdig aus, aber es liegt definitiv an SwapXT. Ich habe die Originalklasse noch einmal draufgezogen
und es hat sich nichts verändert. Wie schon zuvor klappt alles wie geplant auf nicht geswapten Maps, aber auf Maps mit
durch SwapXT vertauschten Tilesets erscheint die Fehlermeldung.

Was mich wundert ist, dass height doch eigentlich ein Wert sein müsste und keine Methode oder? Ist es nicht durch
das hier:

Ruby Quellcode

1
@parent.bitmap.
auf die Klasse parent bezogen?
(Ich bin mir da nicht sicher... Wie gesagt ich kenne mich noch nicht so gut aus.)

In SwapXT wird eine neue Bitmap erstellt:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  def self.load_bitmap(folder_name, filename, hue = 0)
    @cache = {} if @cache == nil
    path = folder_name + filename
    if not @cache.include?(path) or @cache[path].disposed?
      if filename.empty?
        @cache[path] = Bitmap.new(32, 32)
      else
        @cache[path] = Bitmap.new(path)
      end
    end
    if hue == 0
      return @cache[path]
    else
      key = [path, hue]
      if not @cache.include?(key) or @cache[key].disposed?
        @cache[key] = @cache[path].clone
        @cache[key].hue_change(hue)
      end
      return @cache[key]
    end
  end
zum Lesen den Text mit der Maus markieren

Erscheint vielleicht dadurch der Fehler?
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

FlipelyFlip

unregistriert

4

Samstag, 2. Februar 2013, 11:49

das height ist eine Methode, da diese zuerst definiert wird (zB. im Bitmap). Diese gibt nur einen Wert zurück (:
Deswegen kann man das height auch aufrufen (:

@parent ist keine Klasse, es ist eine Klassen-Variable (durch das @ am Anfang definiert. Dadurch kannst du einer Variable einen Wert geben und diesen in der gesamten Klasse aufrufen), welche einen Wert enthält (zB. den Pfad zu einem Bild, oder wie in diesem Fall einen vorher definierten Wert bei Aufruf des Sprite_Characters).
mach am besten in der initialize-Methode direkt unter @parent = parent ein p @parent und es gibt dir Zurück was alles enthalten ist im Parent. (es könnte eventuell sein, dass es zu einer Endlosschleife des prints kommt, weswegen ich dir raten würde, den Taskmanager in dem Fall bereit zu halten)

Die Methode die SwapXT verändert bzw. neu definiert, ist self.load_bitmap und befindet sich in einem Modul, hingegen das @parent.bitmap in der Sprite_Base (glaube ich) definiert ist.
ich werds mir etwas später mal genauer angucken, da mich selbst auch intressiert wo der Fehler denn nun genau liegt.

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

5

Samstag, 9. Februar 2013, 14:13

Hi FlipelyFlip,

nachdem ich jetzt eine gute Woche krank war habe ich mich einmal wieder rangesetzt. Ein Ergebnis deiner
Print-Ausgabe ist im Anhang. Dieses kommt 12-14 mal mit unterschiedlichen Inhalten.
Eine Methode "load_bitmap" wie sie in SwapXT definiert ist konnte ich nicht finden.
In Sprite_Base findet man nur eine Methode "load_animation_bitmap".

Würde es nicht einfach reichen die Mthoden width und height der load_bitmap-Methode in SwapXT
anzuhängen?

LG Gmork
»Gmork« hat folgendes Bild angehängt:
  • Bild 1.png
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

6

Mittwoch, 13. Februar 2013, 19:40

*Push*

Es ist wirklich dringend für mein Spiel, da ich ohne das nichts testen kann. Ich wüsste auch keine Möglichkeit es zu umgehen...
Danke dir auf jeden Fall schon einmal für deine bisherige Hilfe FlipelyFlip. :thumbsup: Weiß jemand wo genau der Fehler liegt oder noch besser
wie ich ihn beheben könnte?

LG Gmork
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

7

Dienstag, 19. Februar 2013, 20:01

*Push*

Edit
*Push*
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Gmork« (19. Februar 2013, 20:01)


Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

8

Sonntag, 24. Februar 2013, 21:52

Und auf einen letzten Versuch:
*Push*
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

9

Montag, 25. Februar 2013, 14:16

Warum wird mein Post wegen Spam gelöscht,aber sein Push Gespamme darf stehn bleiben?

Edit Gjorsch weil das Spam war, du dich im Ton vergriffen hast und du bitte diese Pseudomoderation zu unterlassen hast.
Mein Projekt:
Spoiler

Name: "Glory of Blood"
Entwicklungsstatus: Alpha ( 4 / 100% )
Spielversion: 1.0
Features: Skillsystem / Herstellender Beruf / interaktive Maussteuerung / Rufsystem / Dungeons auf 3 Schwierigkeitsstufen / 8 verschiedene Klassen und zum Release 2 verschiedene Rassen wählbar
zum Lesen den Text mit der Maus markieren

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Gjorsch« (25. Februar 2013, 14:16)


Social Bookmarks