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.

[VX] +[ Two Players ENGINE ]+

2 Players Engine
Version 1.0
by Woratana
Release Date: 14/03/2008 *HAPPY PIE DAY! lol*


Introduction
This script will allow you to create Player 2 that you can control, interact with other events in map, as same as Main Player.


Features
Version 1.0
- Editable Control Buttons for Player 2
- Player 2 can interact with events in map
- Player 2 can walk & Run 8 directions


Demo
Here is a simple demo about how to use this script~ :)

http://vx2engine.notlong.com


Script
Place it above main
Code:
#================================================
# [VX] 2 Players Engine
#------------------------------------------------
# By Woratana [woratana@hotmail.com]
# Version: 1.0
# Date: 14/03/2008 *HAPPY PIE DAY! lol*
#
# CREDIT: Original XP Version by Hima

=begin

+[FEATURES]+
- Create Player 2 that you can control, interact with other events in map,
as same as Main Player.

- Editable Input Buttons for Player 2

- Player 2 can walk & Run 8 directions

+[HOW TO USE]+
To Create Player 2, use call script:
$game_player2 = Game_Player2.new
$game_player2.create(x, y, actor id, follow?)

x and y = X and Y that you want new player to appear

actor id = Character from ID of Actor that you want to use for new player
(ID from Database)

follow? = true (Screen follow new player), false (not follow new player)
*NOT RECOMMEND TO USE FOLLOW*

To Delete Player 2, use call script:
$game_player2.delete

=end
#==============================================================================

class Game_Player2 < Game_Character
  #--------------------------------------------------------------------------
  # START SETUP SCRIPT PART
  # * Constants: INPUT BUTTONS FOR Game_Player 2
  #--------------------------------------------------------------------------
  DOWN = Input::Y # S in Keyboard
  LEFT = Input::X # A in Keyboard
  RIGHT = Input::Z # D in Keyboard
  UP = Input::R # W in Keyboard
  ENTER = Input::L # Q in Keyboard
  RUN = Input::A # Shift in Keyboard
  #--------------------------------------------------------------------------
  # END SETUP SCRIPT PART
  #--------------------------------------------------------------------------
  
  CENTER_X = (544 / 2 - 16) * 8	 # Screen center X coordinate * 8
  CENTER_Y = (416 / 2 - 16) * 8	 # Screen center Y coordinate * 8
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :vehicle_type	   # type of vehicle currenting being ridden
  attr_accessor :character_name
  #--------------------------------------------------------------------------
  # * Create and Set Player 2 Location
  #--------------------------------------------------------------------------
  def create(x,y,id,need_center = false)
	@actor_id = id
	moveto(x,y)
	@need_center = need_center
	refresh
  end
  #--------------------------------------------------------------------------
  # * Clear Player 2
  #--------------------------------------------------------------------------
  def delete
	@actor_id = nil
	refresh
	$game_player2 = nil
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
	super
	@vehicle_type = -1
	@vehicle_getting_on = false	 # Boarding vehicle flag
	@vehicle_getting_off = false	# Getting off vehicle flag
	@transferring = false		   # Player transfer flag
	@new_map_id = 0				 # Destination map ID
	@new_x = 0					  # Destination X coordinate
	@new_y = 0					  # Destination Y coordinate
	@new_direction = 0			  # Post-movement direction
	@walking_bgm = nil			  # For walking BGM memory
  end
  #--------------------------------------------------------------------------
  # * Determine if Stopping
  #--------------------------------------------------------------------------
  def stopping?
	return false if @vehicle_getting_on
	return false if @vehicle_getting_off
	return super
  end
  #--------------------------------------------------------------------------
  # * Player Transfer Reservation
  #	 map_id	: Map ID
  #	 x : x-coordinate
  #	 y		 : y coordinate
  #	 direction : post-movement direction
  #--------------------------------------------------------------------------
  def reserve_transfer(map_id, x, y, direction)
	@transferring = true
	@new_map_id = map_id
	@new_x = x
	@new_y = y
	@new_direction = direction
  end
  #--------------------------------------------------------------------------
  # * Determine if Player Transfer is Reserved
  #--------------------------------------------------------------------------
  def transfer?
	return @transferring
  end
  #--------------------------------------------------------------------------
  # * Execute Player Transfer
  #--------------------------------------------------------------------------
  def perform_transfer
	return unless @transferring
	@transferring = false
	set_direction(@new_direction)
	if $game_map.map_id != @new_map_id
	  $game_map.setup(@new_map_id)	 # Move to other map
	end
	moveto(@new_x, @new_y)
  end
  #--------------------------------------------------------------------------
  # * Determine if Map is Passable
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def map_passable?(x, y)
	case @vehicle_type
	when 0  # Boat
	  return $game_map.boat_passable?(x, y)
	when 1  # Ship
	  return $game_map.ship_passable?(x, y)
	when 2  # Airship
	  return true
	else	# Walking
	  return $game_map.passable?(x, y)
	end
  end
  #--------------------------------------------------------------------------
  # * Determine if Walking is Possible
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def can_walk?(x, y)
	last_vehicle_type = @vehicle_type   # Remove vehicle type
	@vehicle_type = -1				  # Temporarily set to walking
	result = passable?(x, y)			# Determine if passable
	@vehicle_type = last_vehicle_type   # Restore vehicle type
	return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Airship can Land
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def airship_land_ok?(x, y)
	unless $game_map.airship_land_ok?(x, y)
	  return false	# The tile passable attribute is unlandable
	end
	unless $game_map.events_xy(x, y).empty?
	  return false	# Cannot land where there is an event
	end
	return true	   # Can land
  end
  #--------------------------------------------------------------------------
  # * Determine if Riding in Some Kind of Vehicle
  #--------------------------------------------------------------------------
  def in_vehicle?
	return @vehicle_type >= 0
  end
  #--------------------------------------------------------------------------
  # * Determine if Riding in Airship
  #--------------------------------------------------------------------------
  def in_airship?
	return @vehicle_type == 2
  end
  #--------------------------------------------------------------------------
  # * Determine if Dashing
  #--------------------------------------------------------------------------
  def dash?
	return false if @move_route_forcing
	return false if $game_map.disable_dash?
	return false if in_vehicle?
	return Input.press?(RUN)
  end
  #--------------------------------------------------------------------------
  # * Determine if Debug Pass-through State
  #--------------------------------------------------------------------------
  def debug_through?
	return false unless $TEST
	return Input.press?(Input::CTRL)
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def center(x, y)
	display_x = x * 256 - CENTER_X					# Calculate coordinates
	unless $game_map.loop_horizontal?				 # No loop horizontally?
	  max_x = ($game_map.width - 17) * 256			# Calculate max value
	  display_x = [0, [display_x, max_x].min].max	 # Adjust coordinates
	end
	display_y = y * 256 - CENTER_Y					# Calculate coordinates
	unless $game_map.loop_vertical?				   # No loop vertically?
	  max_y = ($game_map.height - 13) * 256		   # Calculate max value
	  display_y = [0, [display_y, max_y].min].max	 # Adjust coordinates
	end
	$game_map.set_display_pos(display_x, display_y)   # Change map location
  end
  #--------------------------------------------------------------------------
  # * Move to Designated Position
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def moveto(x, y)
	super
	# center(x, y)
	make_encounter_count							  # Initialize encounter
	if in_vehicle?									# Riding in vehicle
	  vehicle = $game_map.vehicles[@vehicle_type]	 # Get vehicle
	  vehicle.refresh								 # Refresh
	end
  end
  #--------------------------------------------------------------------------
  # * Increase Steps
  #--------------------------------------------------------------------------
  def increase_steps
	super
	return if @move_route_forcing
	return if in_vehicle?
	$game_party.increase_steps
	$game_party.on_player_walk
  end
  #--------------------------------------------------------------------------
  # * Get Encounter Count
  #--------------------------------------------------------------------------
  def encounter_count
	return @encounter_count
  end
  #--------------------------------------------------------------------------
  # * Make Encounter Count
  #--------------------------------------------------------------------------
  def make_encounter_count
	if $game_map.map_id != 0
	  n = $game_map.encounter_step
	  @encounter_count = rand(n) + rand(n) + 1  # As if rolling 2 dice
	end
  end
  #--------------------------------------------------------------------------
  # * Determine if in Area
  #	 area : Area data (RPG::Area)
  #--------------------------------------------------------------------------
  def in_area?(area)
	return false if area == nil
	return false if $game_map.map_id != area.map_id
	return false if @x < area.rect.x
	return false if @y < area.rect.y
	return false if @x >= area.rect.x + area.rect.width
	return false if @y >= area.rect.y + area.rect.height
	return true
  end
  #--------------------------------------------------------------------------
  # * Create Group ID for Troop Encountered
  #--------------------------------------------------------------------------
  def make_encounter_troop_id
	encounter_list = $game_map.encounter_list.clone
	for area in $data_areas.values
	  encounter_list += area.encounter_list if in_area?(area)
	end
	if encounter_list.empty?
	  make_encounter_count
	  return 0
	end
	return encounter_list[rand(encounter_list.size)]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
	if @actor_id != nil and $game_actors[@actor_id] != nil
	  actor = $game_actors[@actor_id]   # Get front actor
	  @character_name = actor.character_name
	  @character_index = actor.character_index
	else
	  @character_name = ""
	  end
  end
  #--------------------------------------------------------------------------
  # * Determine if Same Position Event is Triggered
  #	 triggers : Trigger array
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
	return false if $game_map.interpreter.running?
	result = false
	for event in $game_map.events_xy(@x, @y)
	  if triggers.include?(event.trigger) and event.priority_type != 1
		event.start
		result = true if event.starting
	  end
	end
	return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Front Event is Triggered
  #	 triggers : Trigger array
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
	return false if $game_map.interpreter.running?
	result = false
	front_x = $game_map.x_with_direction(@x, @direction)
	front_y = $game_map.y_with_direction(@y, @direction)
	for event in $game_map.events_xy(front_x, front_y)
	  if triggers.include?(event.trigger) and event.priority_type == 1
		event.start
		result = true
	  end
	end
	if result == false and $game_map.counter?(front_x, front_y)
	  front_x = $game_map.x_with_direction(front_x, @direction)
	  front_y = $game_map.y_with_direction(front_y, @direction)
	  for event in $game_map.events_xy(front_x, front_y)
		if triggers.include?(event.trigger) and event.priority_type == 1
		  event.start
		  result = true
		end
	  end
	end
	return result
  end
  #--------------------------------------------------------------------------
  # * Determine if Touch Event is Triggered
  #	 x : x-coordinate
  #	 y : y-coordinate
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
	return false if $game_map.interpreter.running?
	result = false
	for event in $game_map.events_xy(x, y)
	  if [1,2].include?(event.trigger) and event.priority_type == 1
		event.start
		result = true
	  end
	end
	return result
  end
  #--------------------------------------------------------------------------
  # * Processing of Movement via input from the Directional Buttons
  #--------------------------------------------------------------------------
  def move_by_input
	return unless movable?
	return if $game_map.interpreter.running?
	if Input.press?(DOWN)
	  move_down
	end
	if Input.press?(LEFT)
	  move_left
	end
	if Input.press?(RIGHT)
	  move_right
	end
	if Input.press?(UP)
	  move_up
	end
  end
  #--------------------------------------------------------------------------
  # * Determine if Movement is Possible
  #--------------------------------------------------------------------------
  def movable?
	return false if moving?					 # Moving
	return false if @move_route_forcing		 # On forced move route
	return false if @vehicle_getting_on		 # Boarding vehicle
	return false if @vehicle_getting_off		# Getting off vehicle
	return false if $game_message.visible	   # Displaying a message
	return false if in_airship? and not $game_map.airship.movable?
	return true
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
	last_real_x = @real_x
	last_real_y = @real_y
	last_moving = moving?
	move_by_input
	super
	update_scroll(last_real_x, last_real_y) if @need_center
	update_vehicle
	update_nonmoving(last_moving)
  end
  #--------------------------------------------------------------------------
  # * Update Scroll
  #--------------------------------------------------------------------------
  def update_scroll(last_real_x, last_real_y)
	ax1 = $game_map.adjust_x(last_real_x)
	ay1 = $game_map.adjust_y(last_real_y)
	ax2 = $game_map.adjust_x(@real_x)
	ay2 = $game_map.adjust_y(@real_y)
	if ay2 > ay1 and ay2 > CENTER_Y
	  $game_map.scroll_down(ay2 - ay1)
	end
	if ax2 < ax1 and ax2 < CENTER_X
	  $game_map.scroll_left(ax1 - ax2)
	end
	if ax2 > ax1 and ax2 > CENTER_X
	  $game_map.scroll_right(ax2 - ax1)
	end
	if ay2 < ay1 and ay2 < CENTER_Y
	  $game_map.scroll_up(ay1 - ay2)
	end
  end
  #--------------------------------------------------------------------------
  # * Update Vehicle
  #--------------------------------------------------------------------------
  def update_vehicle
	return unless in_vehicle?
	vehicle = $game_map.vehicles[@vehicle_type]
	if @vehicle_getting_on					# Boarding?
	  if not moving?
		@direction = vehicle.direction		# Change direction
		@move_speed = vehicle.speed		   # Change movement speed
		@vehicle_getting_on = false		   # Finish boarding operation
		@transparent = true				   # Transparency
	  end
	elsif @vehicle_getting_off				# Getting off?
	  if not moving? and vehicle.altitude == 0
		@vehicle_getting_off = false		  # Finish getting off operation
		@vehicle_type = -1					# Erase vehicle type
		@transparent = false				  # Remove transparency
	  end
	else									  # Riding in vehicle
	  vehicle.sync_with_player				# Move at the same time as player
	end
  end
  #--------------------------------------------------------------------------
  # * Processing when not moving
  #	 last_moving : Was it moving previously?
  #--------------------------------------------------------------------------
  def update_nonmoving(last_moving)
	return if $game_map.interpreter.running?
	return if moving?
	return if check_touch_event if last_moving
	if not $game_message.visible and Input.trigger?(ENTER)
	  return if get_on_off_vehicle
	  return if check_action_event
	end
	update_encounter if last_moving
  end
  #--------------------------------------------------------------------------
  # * Update Encounter
  #--------------------------------------------------------------------------
  def update_encounter
	return if $TEST and Input.press?(Input::CTRL)   # During test play?
	return if in_vehicle?						   # Riding in vehicle?
	if $game_map.bush?(@x, @y)					  # If in bush
	  @encounter_count -= 2						 # Reduce encounters by 2
	else											# If not in bush
	  @encounter_count -= 1						 # Reduce encounters by 1
	end
  end
  #--------------------------------------------------------------------------
  # * Determine Event Start Caused by Touch (overlap)
  #--------------------------------------------------------------------------
  def check_touch_event
	return false if in_airship?
	return check_event_trigger_here([1,2])
  end
  #--------------------------------------------------------------------------
  # * Determine Event Start Caused by [OK] Button
  #--------------------------------------------------------------------------
  def check_action_event
	return false if in_airship?
	return true if check_event_trigger_here([0])
	return check_event_trigger_there([0,1,2])
  end
  #--------------------------------------------------------------------------
  # * Getting On and Off Vehicles
  #--------------------------------------------------------------------------
  def get_on_off_vehicle
	return false unless movable?
	if in_vehicle?
	  return get_off_vehicle
	else
	  return get_on_vehicle
	end
  end
  #--------------------------------------------------------------------------
  # * Board Vehicle
  #	Assumes that the player is not currently in a vehicle.
  #--------------------------------------------------------------------------
  def get_on_vehicle
	front_x = $game_map.x_with_direction(@x, @direction)
	front_y = $game_map.y_with_direction(@y, @direction)
	if $game_map.airship.pos?(@x, @y)	   # Is it overlapping with airship?
	  get_on_airship
	  return true
	elsif $game_map.ship.pos?(front_x, front_y)   # Is there a ship in front?
	  get_on_ship
	  return true
	elsif $game_map.boat.pos?(front_x, front_y)   # Is there a boat in front?
	  get_on_boat
	  return true
	end
	return false
  end
  #--------------------------------------------------------------------------
  # * Board Boat
  #--------------------------------------------------------------------------
  def get_on_boat
	@vehicle_getting_on = true		# Boarding flag
	@vehicle_type = 0				 # Set vehicle type
	force_move_forward				# Move one step forward
	@walking_bgm = RPG::BGM::last	 # Memorize walking BGM
	$game_map.boat.get_on			 # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Board Ship
  #--------------------------------------------------------------------------
  def get_on_ship
	@vehicle_getting_on = true		# Board
	@vehicle_type = 1				 # Set vehicle type
	force_move_forward				# Move one step forward
	@walking_bgm = RPG::BGM::last	 # Memorize walking BGM
	$game_map.ship.get_on			 # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Board Airship
  #--------------------------------------------------------------------------
  def get_on_airship
	@vehicle_getting_on = true		# Start boarding operation
	@vehicle_type = 2				 # Set vehicle type
	@through = true				   # Passage ON
	@walking_bgm = RPG::BGM::last	 # Memorize walking BGM
	$game_map.airship.get_on		  # Boarding processing
  end
  #--------------------------------------------------------------------------
  # * Get Off Vehicle
  #	Assumes that the player is currently riding in a vehicle.
  #--------------------------------------------------------------------------
  def get_off_vehicle
	if in_airship?								# Airship
	  return unless airship_land_ok?(@x, @y)	  # Can't land?
	else										  # Boat/ship
	  front_x = $game_map.x_with_direction(@x, @direction)
	  front_y = $game_map.y_with_direction(@y, @direction)
	  return unless can_walk?(front_x, front_y)   # Can't touch land?
	end
	$game_map.vehicles[@vehicle_type].get_off	 # Get off processing
	if in_airship?								# Airship
	  @direction = 2							  # Face down
	else										  # Boat/ship
	  force_move_forward						  # Move one step forward
	  @transparent = false						# Remove transparency
	end
	@vehicle_getting_off = true				   # Start getting off operation
	@move_speed = 4							   # Return move speed
	@through = false							  # Passage OFF
	@walking_bgm.play							 # Restore walking BGM
	make_encounter_count						  # Initialize encounter
  end
  #--------------------------------------------------------------------------
  # * Force One Step Forward
  #--------------------------------------------------------------------------
  def force_move_forward
	@through = true		 # Passage ON
	move_forward			# Move one step forward
	@through = false		# Passage OFF
  end
end

class Scene_Title < Scene_Base
  alias wor_twopla_scetit_cregam create_game_objects
  def create_game_objects
	wor_twopla_scetit_cregam
	$game_player2 = nil
  end
end

class Scene_Map < Scene_Base
  alias wor_twopla_scemap_upd update
  def update
	wor_twopla_scemap_upd
	$game_player2.update if $game_player2 != nil
  end
end

class Spriteset_Map
  alias wor_twopla_sprmap_crecha create_characters
  alias wor_twopla_sprmap_updcha update_characters
  def create_characters
	wor_twopla_sprmap_crecha
	@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
	@chara_two_pushed = false
  end
  
  def update_characters
	if !(@chara_two_pushed) and $game_player2 != nil
	  @character_sprites.push(Sprite_Character.new(@viewport1, $game_player2))
	  @chara_two_pushed = true
	elsif @chara_two_pushed and $game_player2 == nil
	  for i in 0..@character_sprites.size
		if @character_sprites[i].character.is_a?(Game_Player2)
		  @character_sprites[i].character.character_name = ""
		  @character_sprites[i].update
		  @character_sprites.delete_at(i)
		  break
		end
	  end
	  @chara_two_pushed = false
	end
	wor_twopla_sprmap_updcha
  end
end

class Game_Map
  alias wor_twopla_gammap_passable passable?
  def passable?(x, y, flag = 0x01)
	if $game_player2 != nil and flag
	  return false if $game_player2.x == x and $game_player2.y == y
	end
	wor_twopla_gammap_passable(x, y, flag)
  end
end


Instruction
To Create Player 2, use call script:
Code:
$game_player2 = Game_Player2.new
$game_player2.create(x, y, actor id, follow?)

x and y = X and Y that you want new player to appear

actor id = Character from ID of Actor that you want to use for new player
(ID from Database)

follow? = true (Screen follow new player), false (not follow new player)
*NOT RECOMMEND TO USE FOLLOW*

e.g. Create Player 2 at (10,4) on map, use Actor ID 1's character for player 2, and screen don't follow player 2
Code:
$game_player2 = Game_Player2.new
$game_player2.create(10, 4, 1, false)

To Delete Player 2, use call script:
Code:
$game_player2.delete


Author's Notes
Free for use in your non-commercial work if credit included. If your project is commercial, please contact me.

Please do not redistribute this script without permission. If you want to post it on any forum, please link to this topic.


Credit
Hima - Author of this script in XP version
 

Hero

Member

This sounds nice :) . Is it split screen? Just wondering because if it is, I'm going to try to make a different type of gameplay for RPG Maker. I was also wondering how it would work if player 1 teleported to another map while player 2 was still on the previous map.
 
This script will not split screen :) you can make screen follow player 2 tho.

The second player will show in the next map on same X,Y coordinate after you teleport.
(so you should delete it if you don't want it to show in next map~)
 
Definatly an interesting script. One question though: When you're holding a button pair (W and D or A and W) the player goes in a diagonal motion, is there any way you can release a version of the script that doesn't do that?
 
Well, isn't it will show in same X,Y of next map when teleport?
(I will check when I get home :) )

You can delete the second character before you teleport to prevent that problem.

Anyway, I'm working on next version that you can choose to use 8-direction movement or normal.
+ you can choose to delete player 2 automatically after teleport :)
 

Kraft

Sponsor

Can Player 2 walk out of the screen of player 1?

That should be something in there... that would be nice.

Maybe to solve the teleporting problem, have player 2 not be able to run events that have a comment in the first line (and then you put that in the teleport event)

If player 1 goes to a diff map (teleports) then player 2 will appear underneath player 1 when he re-appears in the next map.

I would also like to be able to set 2 variables to be the player 2 location on the map... so that you could do things like have 1 player stand on a button, have the other player go through a door and stand on another button, and then the first player goes through... that kind of thing...  teamwork ^_^

Actually...  (I just keep thinking of things) have a button (like shift or something) that splits the main hero on the map into 2 people (and you can control both at the same time) and then, when you only need 1 of them, press shift again and he goes back to the player and goes into him and disappears. 

Player 1 controls the screen basically, and player 2 cant walk out of screen view.  If player 2 is at the side of the screen, then player 1 cant move the screen in the opposite direction because player 2 is standing at the opposite side and needs to move for the screen to move...

I am thinking this for a single player game...  I would use it if it had some of this stuff in it...

Anyways, just a bunch of rambling... maybe you can make some use of it ^_^

~Kraft
 
Nice script! My brother and I have always wanted a way to have 2 player RPG Maker games, because we get bored of just watching each other's games. It would be nice if there was a feature to find out whether the second or first player activated the event.

Here's an example from a W.I.P of mine:
Player 1 interacts with a door, the door opens and player 1 moves up to walk in the door.
But, it player 2 interacted with the door, the event would have no way of knowing that it was the second player, and the door would open and player ONE would move up.
 
Thanks for all the suggestions and interests in this script :)

I have no plan to make split screen right now, so I will work on Player 2's location, movement type, check for event trigger (In version 1, event will face to player 1 even though player 2 touched -o-)

New suggestions for this script are welcome :)
 

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