Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Medina Stories License Board

this is awesome script :biggrin: :thumb: :thumb: :thumb: :thumb:
so awesome :cry:

i totally understand @mimichan , that was a great idea , i have that idea in my mind too :smile:

oh i have a few question @juan j. sanchez , i hope you can help? :smile:
i notice we can manualy make our own board, how do we change between using the board 0,board 1, etc ?
if we can change between board at a press of L/R ,would be so cool :biggrin:
just hope the board doesnt get deleted in changing the board (finger crossed) :smile:
 
Thank you, Mouse STD. I worked really hard on this script and it's nice to see other people have found it helpful. I am planning to release a new version as soon as I have some free time. I'm a college student, studying Medicine, and most of my spare time, I sleep.

mouse_std":2vzsao76 said:
i notice we can manualy make our own board, how do we change between using the board 0,board 1, etc ?

You'll notice in the Game_Actor class, in the setup method, you will find the following line, where id is a variable with the initial board ID number.

Ruby:
@board = Board.new(id)

You could easily configure a different board per character using forks and conditionals. Regrettably, there is no way to change the board later in the game. I have thought about adding this option, similar to the International Job Zodiac System that came out with the international release of Final Fantasy XII. Try again a few months from now.

mouse_std":2vzsao76 said:
if we can change between board at a press of L/R ,would be so cool :biggrin:
just hope the board doesn't get deleted in changing the board (finger crossed) :smile:

Pressing L / R already changes between characters. Perhaps you are asking for multiple boards within a same character. This is not currently available as an option, but it might be in the future. I hadn't really thought about it. The way the data structure is built, if you change the board, you will reset all data, so I would have to make some considerable modifications in the Game_Actor class to make this possible.
 
Hey! First of all, awesome script, looks really nice! But sadly I have a problem :/
I'm using the Tankentai Battle System and when I'm trying to paste the script over or under the battle system there is an error when I try to open up the Board Scene:

Unbenannt.png

Here is the Part of the Script where the error is shown (Sideview 2)

def update
super
@damage_sprites = [] if @damage_sprites.nil?
@damage_durations = [] if @damage_durations.nil?
if @_damage_sprites != nil
for sprite in @_damage_sprites
if sprite != nil and sprite.visible
x = DMG_X_MOVE
y = DMG_Y_MOVE
d = sprite.z - 3000
m = self.mirror
@damage_sprites.push(Sprite_Damage.new(sprite, x, y, d, m))
sprite.visible = false
end
end
end
for damage_sprite in @damage_sprites
damage_sprite.update
end
for i in 0...@damage_sprites.size
@damage_sprites = nil if @damage_sprites.disposed?
end
@damage_sprites.compact!
if @_whiten_duration > 0
@_whiten_duration -= 1
self.color.alpha = 128 - (16 - @_whiten_duration) * 10
end
if @_animation != nil and (Graphics.frame_count % 2 == 0)
@_animation_duration -= 1
update_animation
end
if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
update_loop_animation
@_loop_animation_index += 1
@_loop_animation_index %= @_loop_animation.frame_max
end
if @_blink
@_blink_count = (@_blink_count + 1) % 32
if @_blink_count < 16
alpha = (16 - @_blink_count) * 6
else
alpha = (@_blink_count - 16) * 6
end
self.color.set(255, 255, 255, alpha)
end
@@_animations.clear
end


I Hope you can help me, this script is pure awesomeness :O

EDIT: Ok seems like I get a bunch of errors after trying other things than access the board scene :/
I think I will try some other scipts, just ignore my post^^
 
Hey Juan, I created an account simply so I could ask you a few questions about this script, because it is freakin' awesome. I'm not great at scripting, but decent enough once I know where to look in a script. So, I'm sorry if these are elementary questions, but I'm trying to get up to speed on where I need to look to modify the script.

1. How do I get the board to display different avatars for each character? Right now it only shows avatar-1 for all 6 characters. I tried creating .png files in the pictures folder titled "avatar-2", "avatar-3", etc., but to no avail (I'm guessing a quick line needs to be added somewhere).

2. How would I get it to play a sound when you learn a new ability? (with the animation)

Juan J. Sánchez":1xg3ozsp said:
You could easily configure a different board per character using forks and conditionals.

3. Could you give an example of this?

4. Is there a way to get it to display separate icons for each weapon/armor type? For example, an icon of an axe for "axes and hammers" (since you seem to already have these weapon classifications in the script)?

5. Any plans on adding elemental or status resistance as unlockables?

6. Where are the variables to edit the overall size of the board?

7. As far as the six character deal, how would I go about not having those boards appear until those characters are in the party? (like you have in your video)

8. One more question: is there a way to make the type of tile named "???" (like the description) if it isn't visible? For example, right now you can scroll over non-visible tiles and still see the type of upgrade such as "Max HP" or "Daggers 1".

Also, I noticed that you can make "blank" tiles visible in the board edit, which makes them appear as a "0". If you want to know what I'm talking about, create a new board and go around on hitting "z". I'm not sure if you wanted to fix this as it isn't really a bug, but sort of a glitch. :biggrin:

Thanks for all of your help, this script truly is awesome.
 
vagrant":2eve33z6 said:
1. How do I get the board to display different avatars for each character? Right now it only shows avatar-1 for all 6 characters. I tried creating .png files in the pictures folder titled "avatar-2", "avatar-3", etc., but to no avail (I'm guessing a quick line needs to be added somewhere).

Your idea is okay, but your execution isn't. The name "avatar-1" stands for avatar -1, or default avatar. Use "avatar0", "avatar1" and so on, where the number is the same as the character's ID.

vagrant":2eve33z6 said:
2. How would I get it to play a sound when you learn a new ability? (with the animation)

In the Scene_Board class there is a method called animation at the very end of the class. Before the loop, add the following code.

Ruby:
$game_system.se_play($data_system.decision_se)

vagrant":2eve33z6 said:
Juan J. Sánchez":2eve33z6 said:
You could easily configure a different board per character using forks and conditionals.

3. Could you give an example of this?

In the Game_Actor class, in the setup method, type in the following code.

Ruby:
@board = Board.new(0) if actor_id == 0

@board = Board.new(1) if actor_id == 1

@board = Board.new(2) if actor_id == 2

An alternative would be the following.

Ruby:
@board = Board.new(actor_id)

vagrant":2eve33z6 said:
4. Is there a way to get it to display separate icons for each weapon/armor type? For example, an icon of an axe for "axes and hammers" (since you seem to already have these weapon classifications in the script)?

You'd have to do a big modification of the draw_board_icon and draw_board_active methods in the Bitmap class.

vagrant":2eve33z6 said:
5. Any plans on adding elemental or status resistance as unlockables?

Maybe later.

vagrant":2eve33z6 said:
6. Where are the variables to edit the overall size of the board?

In the FFXII module: TILE_X_SIZE and TILE_Y_SIZE.
Warning: I have never tested this function.

vagrant":2eve33z6 said:
7. As far as the six character deal, how would I go about not having those boards appear until those characters are in the party? (like you have in your video)

I don't understand this question.

vagrant":2eve33z6 said:
8. One more question: is there a way to make the type of tile named "???" (like the description) if it isn't visible? For example, right now you can scroll over non-visible tiles and still see the type of upgrade such as "Max HP" or "Daggers 1".

Change the following method in the Bitmap class.

Ruby:
  #--------------------------------------------------------------------------

  # * Draw Board Class

  #     board : board

  #     bx    : board x-coordinate

  #     by    : board y-coordinate

  #     x     : draw spot x-coordinate

  #     y     : draw spot y-coordinate

  #     width : draw spot width

  #--------------------------------------------------------------------------

  def draw_board_class(board, bx, by, x, y, width = 472)

    board_class = board.class(bx, by)

    if board_class != nil and board.visible?(bx, by)

      self.draw_outline(x, y, width, 32, board_class)

    end

  end

vagrant":2eve33z6 said:
Also, I noticed that you can make "blank" tiles visible in the board edit, which makes them appear as a "0". If you want to know what I'm talking about, create a new board and go around on hitting "z". I'm not sure if you wanted to fix this as it isn't really a bug, but sort of a glitch. :biggrin:

This is not a bug. It's for aesthetic purposes.
 
Thanks for the answers!

1. Wow, yeah I should've caught the avatar thing. I'm a dummy for that one.
2. Worked great. Though I'd like to play a custom sound instead of the default decision_se.
3. Awesome!
4. Gotcha, I'll look into it.
5. Great.
6. Didn't mess with it.
7. I figured it out...I was dumb on this one too.
8. It worked, but I think I'm going to go with your way.

Another question: Does this board system in any way modify the default XP system (I don't think it does)? How do I award LP for defeating monsters?

Basically I want the characters to just remain at Level 1, and use XP as LP. Could I just edit the Scene_Battle 2 class that involves giving XP? For example (change actor.xp to actor.ap):

Code:
    # Obtaining EXP

    for i in 0...$game_party.actors.size

      actor = $game_party.actors[i]

      if actor.cant_get_exp? == false

        last_level = actor.level

        actor.ap += exp

        if actor.level > last_level

          @status_window.level_up(i)

        end

      end

    end

This appears to work perfectly, but I thought I'd ask.

And real quick, is there a way to allow characters to unlock tiles by calling a script from an event, or is this pretty difficult?

Example: Character talks to wizard who "teaches" him Fire. This unlocks the tile on the grid set to the Fire spell. The script wouldn't have to find the Fire spell, but rather just unlock the tile at (x,y) = 12,12 (or whatever) that I already set to Fire.

I'm reviving a project I worked on a couple years ago, so I apologize for the simple questions. Trying to get back into the swing of things :D
 
Juan J. Sánchez":26cbujzz said:
In the FFXII module: TILE_X_SIZE and TILE_Y_SIZE.
Warning: I have never tested this function.
This seems to work fine to me. I increased the size to 32x32, and decreased the size of the miniboard tiles to 6x6 and it draws perfectly. Theoretically, you could use any number of sizes, though I might add that the sprite sizes need to be adjusted accordingly:

16 * 12 = 192 (16x16; 12 pixel mini-tiles)
24 * 8 = 192 (24x24; 8 pixel mini-tiles)
32 * 6 = 192 (32x32; 6 pixel mini-tiles)
48 * 4 = 192 (48x48; 4 pixel mini-tiles)
96 * 2 = 192 (96x96; 2 pixel mini-tiles)
192 * 1 = 192 (192x192; 1 pixel mini-tiles)

etc.
 
Thanks, man. It's great to know it actually do works. I wrote the code thinking of any size tiles. I particularly want big tiles. But I was too lazy to test the function, since it demanded making additional sprites.
 
Hey Juan, I have a question. I've created extra types that I'm using to draw the images for different weapon and armor types. It's working great, but I have one problem:

Since I'm adding commands to the command menu (in Scene_CreateBoard), the menu is scrolling outside the bounds of the screen, making it difficult to create new tiles. If I create more types, it just keeps going outside the screen. (see below) How can I fix this command window to scroll the items? I've been trying for like hours now and I just can't seem to do it...I've never been good at windows... :huh:

Also, is there a way to call a script from an event on the map to allow characters to "learn tiles"? Thanks in advance for the script and help!



 
I wouldn't do that. It's not simply the command menu you're altering. Types are the way in which a character inherently acquires the data in the license board. It's not as simple as simply adding new types. You'd have to alter the Game_Actor class as well, among other things.

Also, sure, a character can learn an ability from outside the board. Try this code.

Ruby:
actor = $game_party.actors[i]

actor.board.activate(x, y, boolean)

If you set the boolean to true, you'll learn something. If you set it to false, you'll unlearn something.
 
Juan J. Sánchez":miplfp5q said:
I wouldn't do that. It's not simply the command menu you're altering. Types are the way in which a character inherently acquires the data in the license board. It's not as simple as simply adding new types. You'd have to alter the Game_Actor class as well, among other things.
Your event script worked perfectly!

It's just the Scene_CreateBoard window I'm having trouble with (see below). I set the y coordinate to 0 just so I could read the value boxes, but half of my selections are outside the bottom of the screen. How do I set a height on this window, or set it to scroll? I feel like an idiot asking this, because I have a feeling the answer is very easy...

Actually, the functionality in the game itself works perfectly (even creating the board, despite the window issue). Your base code didn't require any serious edits for this, and the characters acquire abilities all the same without any bugs or glitches. I didn't have to edit Game_Actor. I only had to edit FFXII Module, Bitmap, Scene_CreateBoard, and Board. They aren't ACTUALLY new classes, but just the appearance of different class (all weapons still use $data_weapons[value] and @weapon_set.push(n)). For example:

From FFXII Module and Bitmap:
Code:
    when 9   # Swords

      return $data_weapons[value]

    when 10  # Daggers

      return $data_weapons[value]

    when 11  # Axes

      return $data_weapons[value]

    when 12  # Greatswords

      return $data_weapons[value]

    when 13  # Katanas

      return $data_weapons[value]

    when 14  # Spears

      return $data_weapons[value]

    when 15  # Rods

      return $data_weapons[value]

    when 16  # Staves

      return $data_weapons[value]

    when 17  # Bows

      return $data_weapons[value]

    when 18  # Guns

      return $data_weapons[value]

    when 19  # Light Armor

      return $data_armors[value]

    when 20  # Medium Armor

      return $data_armors[value]

    when 21  # Heavy Armor

      return $data_armors[value]

    when 22  # Shields

      return $data_armors[value]

    when 23  # Accessory Set

      return $data_armors[value]

    end
In Board:
Code:
      when 9   # Swords

        @weapon_set.push(n)

      when 10  # Daggers

        @weapon_set.push(n)

      when 11  # Axes

        @weapon_set.push(n)

      when 12  # Greatswords

        @weapon_set.push(n)

      when 13  # Katanas

        @weapon_set.push(n)

      when 14  # Spears

        @weapon_set.push(n)

      when 15  # Rods

        @weapon_set.push(n)

      when 16  # Staves

        @weapon_set.push(n)

      when 17  # Bows

        @weapon_set.push(n)

      when 18  # Guns

        @weapon_set.push(n)

      when 19  # Light Armor

        @armor_set.push(n)

      when 20  # Medium Armor

        @armor_set.push(n)

      when 21  # Heavy Armor

        @armor_set.push(n)

      when 22  # Shields

        @armor_set.push(n)

      when 23  # Accessory Set

        @armor_set.push(n)
A sample of the classes I have made, with full functionality:
 
Hey Juan, I'm having a problem with learning passive skills in your script. I'm using Gando's passive skill script which I've copied below. Basically, I want to make skills on the grid that increase XP by 10% or Gold by 10% (Gando's script does this).

However, when the character learns the skill via the license board, the skills don't work. They appear in the character's skill menu, but don't do anything. I know it is conflicting somewhere with the method of learning skills from the license board, because if I use an event to give the characters the passive skills (or have them start with it), it works. Only when I learn it from the license board does it not work. Why would this be?

Note: The order doesn't matter either. I tried Gando's script both above and below yours.

Code:
#------------------------------------------------------------------------------

#  CREDITS: Gando for making the script and khmp for helping with it.

#==============================================================================

  PASSIVE_SKILLS = [138, 139]

  #skill_id => [max_hp, max_sp, str, dex, agi, int, atk, pdef, mdef, gold, exp]

  ATTRIBUTES =

  {

  138 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0] ,

  139 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100] ,  

  }

  

  GOLD_GAIN_PERCENT = true

  EXP_GAIN_PERCENT  = true

  

class Game_Actor < Game_Battler

  alias passive_skill_learn learn_skill

  alias passive_skill_forget forget_skill

  #--------------------------------------------------------------------------

  # * Get Actor ID

  #--------------------------------------------------------------------------

  def learn_skill(skill_id)

    passive_skill_learn(skill_id)

    if PASSIVE_SKILLS.include?(skill_id)

      @maxhp_plus += ATTRIBUTES[skill_id][0]

      @maxsp_plus += ATTRIBUTES[skill_id][1]

      @str_plus   += ATTRIBUTES[skill_id][2]

      @dex_plus   += ATTRIBUTES[skill_id][3]

      @agi_plus   += ATTRIBUTES[skill_id][4]

      @int_plus   += ATTRIBUTES[skill_id][5]

      @atk_plus   += ATTRIBUTES[skill_id][6]

      @pdef_plus  += ATTRIBUTES[skill_id][7]

      @mdef_plus  += ATTRIBUTES[skill_id][8]

      @goldt      += ATTRIBUTES[skill_id][9]

      @expt       += ATTRIBUTES[skill_id][10]

    end

  end

  def forget_skill(skill_id)

    passive_skill_forget(skill_id)

    if PASSIVE_SKILLS.include?(skill_id)

      @maxhp_plus -= ATTRIBUTES[skill_id][0]

      @maxsp_plus -= ATTRIBUTES[skill_id][1]

      @str_plus   -= ATTRIBUTES[skill_id][2]

      @dex_plus   -= ATTRIBUTES[skill_id][3]

      @agi_plus   -= ATTRIBUTES[skill_id][4]

      @int_plus   -= ATTRIBUTES[skill_id][5]

      @atk_plus   -= ATTRIBUTES[skill_id][6]

      @pdef_plus  -= ATTRIBUTES[skill_id][7]

      @mdef_plus  -= ATTRIBUTES[skill_id][8]

      @goldt      -= ATTRIBUTES[skill_id][9]

      @expt       -= ATTRIBUTES[skill_id][10]

    end

  end

end

 

class Game_Battler

  attr_accessor :goldt

  attr_accessor :expt

  alias parameter_init initialize

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

    @atk_plus = 0

    @pdef_plus = 0

    @mdef_plus = 0

    @goldt = 0

    @expt = 0

    parameter_init

  end

  

  #--------------------------------------------------------------------------

  # * Get Attack

  #--------------------------------------------------------------------------

  def atk

    n = [[base_atk + @atk_plus, 1].max, 999].min

    for state in states do n *= state.atk_rate / 100.0 end

    n = [[Integer(n), 1].max, 999].min

    return n

  end

 

  #--------------------------------------------------------------------------

  # * Get Defense

  #--------------------------------------------------------------------------

  def pdef

    n = [[base_pdef + @pdef_plus, 1].max, 999].min

    for i in @states

      n *= $data_states[i].pdef_rate / 100.0

    end

    return Integer(n)

  end

  

  #--------------------------------------------------------------------------

  # * Get Defense

  #--------------------------------------------------------------------------

  def mdef

    n = [[base_mdef + @mdef_plus, 1].max, 999].min

    for i in @states

      n *= $data_states[i].mdef_rate / 100.0

    end

    return Integer(n)

  end

  

  #--------------------------------------------------------------------------

  # * Set Attack

  #     new_atk : new attack

  #--------------------------------------------------------------------------

  def atk=(new_atk)

    @atk_plus += new_atk - self.atk

    @atk_plus = [[@atk_plus, -999].max, 999].min

  end

  

  #--------------------------------------------------------------------------

  # * Set Defense

  #     new_def : new defense

  #--------------------------------------------------------------------------

  def pdef=(new_pdef)

    @pdef_plus += new_pdef - self.pdef

    @pdef_plus = [[@pdef_plus, -999].max, 999].min

  end

  

  #--------------------------------------------------------------------------

  # * Set Defense

  #     new_def : new defense

  #--------------------------------------------------------------------------

  def mdef=(new_mdef)

    @mdef_plus += new_mdef - self.mdef

    @mdef_plus = [[@mdef_plus, -999].max, 999].min

  end

end

 

class Scene_Battle

  #--------------------------------------------------------------------------

  # * Start After Battle Phase

  #--------------------------------------------------------------------------

  def start_phase5

    # Shift to phase 5

    @phase = 5

    # Play battle end ME

    $game_system.me_play($game_system.battle_end_me)

    # Return to BGM before battle started

    $game_system.bgm_play($game_temp.map_bgm)

    # Initialize EXP, amount of gold, and treasure

    exp = 0

    gold = 0

    treasures = []

    # Loop

    for enemy in $game_troop.enemies

      # If enemy is not hidden

      unless enemy.hidden

        # Add EXP and amount of gold obtained

        exp += enemy.exp

        gold += enemy.gold

        # Determine if treasure appears

        if rand(100) < enemy.treasure_prob

          if enemy.item_id > 0

            treasures.push($data_items[enemy.item_id])

          end

          if enemy.weapon_id > 0

            treasures.push($data_weapons[enemy.weapon_id])

          end

          if enemy.armor_id > 0

            treasures.push($data_armors[enemy.armor_id])

          end

        end

      end

    end

    # Treasure is limited to a maximum of 6 items

    treasures = treasures[0..5]

    # Obtaining EXP

    gold_mult = 0

    exp_mult = 0

    for i in 0...$game_party.actors.size

      actor = $game_party.actors[i]

      exp_mult += $game_party.actors[i].expt

    end

    if EXP_GAIN_PERCENT == true

      exp += (exp * exp_mult == 0? 0: exp * exp_mult / 100).to_i

    elsif EXP_GAIN_PERCENT == false

      exp = (exp * exp_mult == 0? 0: exp * exp_mult).to_i

    end

    for i in 0...$game_party.actors.size

      actor = $game_party.actors[i]

      gold_mult += $game_party.actors[i].goldt

      if actor.cant_get_exp? == false

        last_level = actor.level

        actor.exp += exp

        if actor.level > last_level

          @status_window.level_up(i)

        end

      end

    end

    if GOLD_GAIN_PERCENT == true

      gold += (gold * gold_mult == 0? 0: gold * gold_mult / 100).to_i

    elsif GOLD_GAIN_PERCENT == false

      gold = (gold * gold_mult == 0? 0: gold * gold_mult).to_i

    end

    # Obtaining gold

    $game_party.gain_gold(gold)

    # Obtaining treasure

    for item in treasures

      case item

      when RPG::Item

        $game_party.gain_item(item.id, 1)

      when RPG::Weapon

        $game_party.gain_weapon(item.id, 1)

      when RPG::Armor

        $game_party.gain_armor(item.id, 1)

      end

    end

    # Make battle result window

    @result_window = Window_BattleResult.new(exp, gold, treasures)

    # Set wait count

    @phase5_wait_count = 100

  end

end

#==============================================================================

# ** Window_Skill

#------------------------------------------------------------------------------

#  This will hide the zero if the skill doesn't cost any SP.

#==============================================================================

class Window_Skill < Window_Selectable

  #--------------------------------------------------------------------------

  # * Draw Item

  #     index : item number

  #--------------------------------------------------------------------------

  def draw_item(index)

    skill = @data[index]

    if @actor.skill_can_use?(skill.id)

      self.contents.font.color = normal_color

    else

      self.contents.font.color = disabled_color

    end

    x = 4 + index % 2 * (288 + 32)

    y = index / 2 * 32

    rect = Rect.new(x, y, self.width / @column_max - 32, 32)

    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

    bitmap = RPG::Cache.icon(skill.icon_name)

    opacity = self.contents.font.color == normal_color ? 255 : 128

    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)

    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)

    if @data[index].sp_cost != 0

    self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)

    end

  end

end
 
NEED HELP! how do i "install" this script, i created a file above the main and pasted it but can't get it to work...saw your extra instructions and don't get them??? how do i open it and create my own and even use it??? tried demo, barely worked...
 
hola, supongo q hablas español, asi q dejame decirte q este es uno de los mejores scripts hechos para rmxp, espero q continues trabajando en el.
mis mas sinceras felicitaciones.
 
Muchas gracias, Paladin. Siempre me ha entretenido mucho programar. Desearía tener más tiempo para hacerlo. Sin embargo, estoy estudiando medicina y a veces me es muy difícil encontrar el tiempo. Empero, siempre agradezco mucho el apoyo que me ha dado esta comunidad. Comentarios como el tuyo realmente son lo que me hacen querer mejorar mis "scripts". Estos días, y probablemente hasta mediados de año, no estoy activo en RPG Maker XP. Sin embargo, visito la comunidad todos los días. Por aquello.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top