Main Menu
  • Welcome to The RPG Maker Resource Kit.

[MISSING] Blizz-ABS Version 0.9.7.2

Started by Blizzard, December 06, 2006, 12:14:27 PM

0 Members and 3 Guests are viewing this topic.

Blizzard

I just love the oldskool games Zelda 3, 4, Secret of Mana, Secret of Evermore etc., so I know how it works and how it works good. :)
Believe me, Blizz-ABS will be the most used ABS in near future. =D I only need to implement the many other features I've planned. =D
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Irock

#26
Quote from: Blizzard on January 08, 2007, 08:18:19 AM
I just love the oldskool games Zelda 3, 4, Secret of Mana, Secret of Evermore etc., so I know how it works and how it works good. :)
Believe me, Blizz-ABS will be the most used ABS in near future. =D I only need to implement the many other features I've planned. =D

Yeah,  by the time I'm done with The Dark Seraph it should be complete and I can use it in my next game.   ;D


EDIT:
If you need a screenshot here's one.

Thats the best I could get it.

Blizzard

#27
When I release the new code with changed HUD and functions (maybe leave the mouse control?) it will look and work even better.

The only sad thing is that I won't be able to implement a "Shortest path finder", so enemies go around obstacles. Thing is tht RMXP is too limited and the execution of the  code freezes the game for short if the distance from the enemy to the player is more than 5. The algorythm is of exponential complexity. :(
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Irock

Quote from: Blizzard on January 09, 2007, 09:37:37 AM
When I release the new code with changed HUD and functions (maybe leave the mouse control?) it will look and work even better.

The only sad thing is that I won't be able to implement a "Shortest path finder", so enemies go around obstacles. Thing is tht RMXP is too limited and the execution of the  code freezes the game for short if the distance from the enemy to the player is more than 5. The algorythm is of exponential complexity. :(

Eh, it works anyways. I didn't notice them not go around obstacles. It'll be great anyways.

Blizzard

#29
I've had an idea for an alternative algorythm, but the problem would be a big RAM usage when maps go over 200x200. A 500x500 map would need about 250MB. :=
But at least the algorythm itself is efficient as hell.
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Karo Rushe

Blizzard is a God  :tpg: It's so beautiful...But I dunno if it's compatible with Soul-Rage+Soul-Limit Script :tpg:.

Zeriab

Are you using the A* algorythm or something similar?
There is an implementation in Ruby of it here: http://www.dubealex.com/asylum/index.php?showtopic=11874
It IS crappy, but you might use some of the principles for inspiration.
Also can't you utilize the graph being sparse?

Karo Rushe

Eh...kind of a noob question....I made and event in which the Character can't get out of the Stage until all the Enemies/Boss are defeated...but the even keeps saying what I wrote about defeat the Boss/Enemies.

Arrow

#33
Like I said, this is great, but there are two problems now.

A: When you try to use move event, noticably on touch event events, it FLIPS THE FUCK OUT. If you tap the arrow so you barely touch it, you scoot forward or whatever one pixel. Tap again, AND YOU CAN FLLLLLLLLLYYYYYYYYYYYYYYYYYYYYYYY! Often times 90 degrees to the right of the intended direction.

B: Hitting F12 causes a nasty cras due to having moar stackz than teh xp cU[size=0pt] [/size]HN handle.

Blizzard

I'll look into it. But I don't know how the F12 thing works, so I don't know if I will be able to fix it.

Quote from: Dark Angel Sion on January 11, 2007, 02:32:50 AM
Eh...kind of a noob question....I made and event in which the Character can't get out of the Stage until all the Enemies/Boss are defeated...but the even keeps saying what I wrote about defeat the Boss/Enemies.

Just use the "Call script" command and type

$game_variables[X] = $game_system.how_many_enemies_left

Replace X with the ID of a variable. After this, that variable will be set to the number of enemies that are left on the map. Use this together with cond. branch and parallel process to achieve the effect you want when the enemies left on the map are equal/greater than/whatever to a value.

Quote from: Zeriab on January 11, 2007, 12:02:42 AM
Are you using the A* algorythm or something similar?
There is an implementation in Ruby of it here: http://www.dubealex.com/asylum/index.php?showtopic=11874
It IS crappy, but you might use some of the principles for inspiration.
Also can't you utilize the graph being sparse?

I am already much further than this. I didn't even think about using the Move_Command class.
I have tried different algorythms so far. Dijkstri's algorythm brings RMXP to its knees, lol! I have tried an algorythm based on a "neighbour-vertex matrix" but it takes too much of RAM. Now I am working on a hybrid between these two and it doesn't lag too much right now. I actually need to get rid of some extra processing and bring the algorythm down to a linear complexity. Any exponential complexity causes enormous lag. =/

I would use Near Fantastica's and just fix the glitch if there is actually no path to the goal, but his algorythm also increases the lag too much in bigger maps, so there is no point.

My algorythm so far basically uses a virtual map with a passability table similar to the map's own @passages variable and I try to check the current passability (because of events, player etc.) only around the character. The rest is being processed by the virtual map, but I the process time increases exponential according to the length of the path. =/ Shit~
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Zeriab

#35
Can I see what you have done?

Also if you haven't already you should try to limit the number of choices. I mean, who cares if you take a path that's 1 step longer than the shortest path, especially if it is like 10 steps long.
This makes me think.... Have there been made any good randomized algorithm for this? (Or a part of it being such)

Karo Rushe

Quote from: Blizzard on January 11, 2007, 10:47:27 AM
I'll look into it. But I don't know how the F12 thing works, so I don't know if I will be able to fix it.

Quote from: Dark Angel Sion on January 11, 2007, 02:32:50 AM
Eh...kind of a noob question....I made and event in which the Character can't get out of the Stage until all the Enemies/Boss are defeated...but the even keeps saying what I wrote about defeat the Boss/Enemies.

Just use the "Call script" command and type

$game_variables[X] = $game_system.how_many_enemies_left

Replace X with the ID of a variable. After this, that variable will be set to the number of enemies that are left on the map. Use this together with cond. branch and parallel process to achieve the effect you want when the enemies left on the map are equal/greater than/whatever to a value.
I followed instructions...but I get the feeling I did something wrong...the teleporter thingy I made to appear after the boss is defeated...doesn't appear yet.

Blizzard

Post the event code. Did you make it parallel process?

@Zeriab:

Still haven't changed it, since the other day. The virtual map is loaded into $game_map and is being access by any Game_Character sub-class. I think there is a bug. Just like I said, I didn't fix it yet. Ignore $lag, I use it to write out "Hi" when the algorythm is executed to see the difference between that case and the case where it isn't. It works 8-way, BTW.

#==============================================================================
# Virtual_Map
#==============================================================================

class Virtual_Map
 
  def initialize
    @matrix = Table.new($game_map.width, $game_map.height)
    object = Game_Character.new
    for i in 0...$game_map.width
      for j in 0...$game_map.height
        res = 0
        res += 0x01 if object.v_passable?(i, j, 2)
        res += 0x02 if object.v_passable?(i, j, 4)
        res += 0x04 if object.v_passable?(i, j, 6)
        res += 0x08 if object.v_passable?(i, j, 8)
        @matrix[i, j] = res
      end
    end
  end
 
  def find_path(object, dest_x, dest_y)
    return if object.x == dest_x and object.y == dest_y
    x = object.x
    y = object.y
    st_dir = []
    if object.passable?(x, y, 2)
      st_dir.push(2)
      st_dir.push(1) if object.passable?(x, y+1, 4)
      st_dir.push(3) if object.passable?(x, y+1, 6)
    end
    if object.passable?(x, y, 4)
      st_dir.push(4)
      st_dir.push(1) if object.passable?(x-1, y, 2)
      st_dir.push(7) if object.passable?(x-1, y, 8)
    end
    if object.passable?(x, y, 6)
      st_dir.push(6)
      st_dir.push(3) if object.passable?(x+1, y, 2)
      st_dir.push(9) if object.passable?(x+1, y, 8)
    end
    if object.passable?(x, y, 8)
      st_dir.push(8)
      st_dir.push(7) if object.passable?(x, y-1, 4)
      st_dir.push(9) if object.passable?(x, y-1, 6)
    end
    st_dir |= st_dir
    return [] if st_dir == []
    coos = [[x, y, 0]]
    for i in st_dir
      case i
      when 1 then coos.push([x-1, y+1, 10-i])
      when 2 then coos.push([x, y+1, 10-i])
      when 3 then coos.push([x+1, y+1, 10-i])
      when 4 then coos.push([x-1, y, 10-i])
      when 6 then coos.push([x+1, y, 10-i])
      when 7 then coos.push([x-1, y-1, 10-i])
      when 8 then coos.push([x, y-1, 10-i])
      when 9 then coos.push([x+1, y-1, 10-i])
      end
    end
    path = []
    next_x, next_y = dest_x, dest_y
    coos.reverse!
    coos.size.times do
      for i in 0...coos.size
        if coos[i][0] == next_x and coos[i][1] == next_y
          case coos[i][2]
          when 1
            next_x -= 1
            next_y += 1
          when 2
            next_y += 1
          when 3
            next_x += 1
            next_y += 1
          when 4
            next_x -= 1
          when 6
            next_x += 1
          when 7
            next_x -= 1
            next_y -= 1
          when 8
            next_y -= 1
          when 9
            next_x += 1
            next_y -= 1
          end
          path.push(coos[i][2])
          coos[i] = nil
          break
        end
      end
      coos.compact!
      break if next_x == x and next_y == y
    end
    for i in 0...path.size
      path[i] = 10 - path[i]
    end
    $lag = "Hi"
    return path
  end
 
end

#==============================================================================
# Game_Character
#==============================================================================

class Game_Character

  def v_passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    return false unless $game_map.valid?(new_x, new_y)
    return false unless $game_map.v_passable?(x, y, d, self)
    return true
  end
 
end

#==============================================================================
# Game_Map
#==============================================================================

class Game_Map
 
  attr_reader :vmap
 
  alias setup_vmap_later setup
  def setup(id)
    setup_vmap_later(id)
    @vmap = Virtual_Map.new
  end
 
  def v_passable?(x, y, d, self_event = nil)
    return false unless valid?(x, y)
    bit = (1 << (d / 2 - 1)) & 0x0f
    for i in [2, 1, 0]
      tile_id = data[x, y, i]
      if tile_id == nil
        return false
      elsif @passages[tile_id] & bit != 0
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        return false
      elsif @priorities[tile_id] == 0
        return true
      end
    end
    return true
  end
 
end
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

sparten84

#38
when i'm playing an error comes up when i hit "f" and then i read in the instructions that i need to name a spiteset a certain name how do i name spritesets?
For Free Web Design, E-mail us at freewebdesign@gmail.com

Karo Rushe




I get a feeling I made xomething wrong...

Blizzard

#40
Yeah, it's wrong. You don't need a common event for this, just use a usual event as parallel process in the map. Use this event code:

> Cond: Self-switch A == OFF
  > Wait: 10 frames
  > Message: "Defeat TERROR-KING ARCHFIEND!!!"
  > Self-switch operation: Turn A ON
> End
> Script: $game_variables[1] =
          $game_system.how_many_enemies_left
> Cond: Variable[0001] == 0
  > Cond: Self-switch B == OFF
    > Wait: 10 frames
    > (put here what happens if you defeat your enemy)
    > Self-switch operation: Turn B ON
    > Switch operation: Turn [X] OFF
  > End
> End


You only need to consider three things:

1. Switch X HAS TO be turned ON before entering the battle. Make the enemy event's condition to be this switch. This will ensure that he won't appear again in this room.

2. The message "Defeat..." will occur only the first time when entering the map. The code when he dies will also occur only once.

3. Set the parallel process event's own condition also to be that switch X. Safe is safe. ;)

@Sparten: Didn't I type it in the instructions? Name the additional spriteset the same like the usual, but add something to the name according to which sprite it is:

Attack sprite - _atk
Defend sprite - _def
Skill sprite - _skl
Item sprite - _itm
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Arrow

Quote from: arrowone on January 11, 2007, 02:57:09 AM
Like I said, this is great, but there are two problems now.

A: When you try to use move event, noticably on touch event events, it FLIPS THE FUCK OUT. If you tap the arrow so you barely touch it, you scoot forward or whatever one pixel. Tap again, AND YOU CAN FLLLLLLLLLYYYYYYYYYYYYYYYYYYYYYYY! Often times 90 degrees to the right of the intended direction.

B: Hitting F12 causes a nasty cras due to having moar stackz than teh xp cU[size=0pt] [/size]HN handle.

Blizzard

The F12 error happens usually when a method from the compile RGSS10XX.dll is being aliased. Just ignore it.
And for the other, I haven't had time to fix it yet. I just need to add a "already touched" flag.

BTW, I added a 2nd release of the MMO Test Edition (of course compiled ::)).
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

pliio8

I keep getting errors, how do I set an enemy's AI?
Games in progress:
Tome of Arastovia: 7% complete at 2 hours of gametime

Arrow

!\e


  • # being the enemy number.

    I think that's correct...

pliio8

Thats how you set an enemy...

How do I set the enemy's AI?
Games in progress:
Tome of Arastovia: 7% complete at 2 hours of gametime

Blizzard

AI works automatically if you type the event names correct. It should be \e[X], where X is the ID of that enemy in the database. Events with such names will be replaced on the map with enhanced enemy events that actually posses that AI.
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Brotherh0od

Umm...can you post the script that is used in the blizz-mmo test edition release 2?
ARGH!!!!!

Blizzard

Sorry, but I can't. It is exclusively for Aerion Online. Because I get payed, I have to keep the source code secret.
Get King of Booze for Android, for iOS, for OUYA or for Windows!
Visit our website.
You can also love/hate us on Facebook or the game itself.



Get DropBox, the best free file syncing service there is!

Brotherh0od

ARGH!!!!!