Skip to content

Instantly share code, notes, and snippets.

@rickwillcox
Created September 14, 2022 15:13
Show Gist options
  • Save rickwillcox/d111ab8e97ee33c914b2c2fbf3a1c7e7 to your computer and use it in GitHub Desktop.
Save rickwillcox/d111ab8e97ee33c914b2c2fbf3a1c7e7 to your computer and use it in GitHub Desktop.
extends Node
#TREES
const OAK_TREE = "O"
#ORES
const GOLD_ORE = "G"
const SILVER_ORE = "S"
const TIN_ORE = "T"
const TYPE = "T"
const HITS_HP = "H"
const CURRENT_HITS = "C"
const RESPAWN = "R"
const ACTIVE = "A"
#ENEMIES
const ENEMY_TYPE = "T"
const ENEMY_LOCATION = "L"
const ENEMY_CURRENT_HEALTH = "H"
const ENEMY_MAX_HEALTH = "M"
const ENEMY_STATE = "S"
const ENEMY_TIME_OUT = "O"
#WORLD STATE
const TIMESTAMP = "T"
const ENEMIES = "E"
const ORES = "O"
#PLAYER
const PLAYER_ANIMATION_VECTOR = "A"
const PLAYER_POSITION = "P"
const PLAYER_TIMESTAMP = "T"
# Operation codes used to bundle packets from server to client
enum Opcodes {
TAKE_DAMAGE = 0,
INVENTORY_OK,
INVENTORY_NOK,
REMOVE_ITEM,
ATTACK_SWING,
PLAYER_SPAWN,
PLAYER_DESPAWN,
PLAYER_DEAD,
PLAYER_INITIAL_INVENTORY,
PLAYER_INVENTORY_UPDATE,
CHAT,
ENEMY_SPAWN,
ENEMY_DIED,
ENEMY_DESPAWN,
ITEM_CRAFT_OK,
ITEM_CRAFT_NOK,
SMELTER_STARTED,
SMELTER_STOPPED,
INVENTORY_SLOT_UPDATE,
}
enum EnemyState {
ALIVE,
DEAD,
}
enum EnemyType {
SLIME,
MINO,
BATSQUITO,
DEER,
}
# Player chat
static func create_player_chat_packet(player_id, chatstring):
return { "op_code": Opcodes.CHAT, "content" : chatstring, "player_id": player_id}
# Confirms inventory operation
static func create_inventory_ok_packet():
return { "op_code" : Opcodes.INVENTORY_OK }
# Rejects inventory operation
static func create_inventory_nok_packet():
return { "op_code" : Opcodes.INVENTORY_NOK }
# Despawn an item
static func create_remove_item_packet(item_id : int):
return { "op_code" : Opcodes.REMOVE_ITEM, "item_id" : item_id }
# PlayerIds are unsinged 31-bit integers. We can differentiate from enemy_id by sign
# Damage done to an entity
static func create_take_damage_packet(attacker : int, victim : int, damage : int):
return { "op_code" : Opcodes.TAKE_DAMAGE, "attacker" : attacker, "victim" : victim, "damage" : damage }
static func create_enemy_take_damage_packet(attacker : int, victim : int, damage : int):
return create_take_damage_packet(attacker, -victim, damage)
static func create_player_take_damage_packet(attacker : int, victim : int, damage : int):
return create_take_damage_packet(-attacker, victim, damage)
static func create_player_died_packet(player_id : int, player_position : Vector2):
return { "op_code" : Opcodes.PLAYER_DEAD, "player_id" : player_id, "player_position" : player_position}
# Attack swing started by an entity
static func create_attack_swing_packet(attacker : int, victim : int):
return { "op_code" : Opcodes.ATTACK_SWING, "attacker" : attacker, "victim" : victim }
static func create_enemy_attack_swing_packet(attacker: int, victim : int):
return create_attack_swing_packet(-attacker, victim)
static func create_player_attack_swing_packet(attacker : int, victim : int):
return create_attack_swing_packet(attacker, -victim)
static func create_player_spawn_packet(player_id : int, position: Vector2, username : String):
return {"op_code" : Opcodes.PLAYER_SPAWN, "player_id" : player_id, "position" : position, "username" : username}
static func create_player_despawn_packet(player_id : int):
return { "op_code" : Opcodes.PLAYER_DESPAWN, "player_id" : player_id }
static func create_initial_inventory_packet(
player_id : int,
head_item_id : int,
chest_item_id : int,
legs_item_id : int,
feet_item_id : int,
hands_item_id : int):
return { "op_code" : Opcodes.PLAYER_INITIAL_INVENTORY,
"player_id" : player_id,
"head" : head_item_id,
"chest" : chest_item_id,
"legs" : legs_item_id,
"feet" : feet_item_id,
"hands" : hands_item_id }
static func create_inventory_update_packet(player_id : int, slot : int, item_id : int):
return { "op_code" : Opcodes.PLAYER_INVENTORY_UPDATE, "player_id" : player_id,
"slot" : slot, "item_id" : item_id }
static func create_enemy_spawn_packet(enemy_id : int, enemy_state : int, enemy_type : int, health : int, position : Vector2):
return { "op_code" : Opcodes.ENEMY_SPAWN,
"enemy_id" : enemy_id,
"enemy_state" : enemy_state,
"enemy_type" : enemy_type,
"health" : health,
"position" : position }
static func create_enemy_died_packet(enemy_id : int):
return { "op_code" : Opcodes.ENEMY_DIED, "enemy_id" : enemy_id }
static func create_enemy_despawn_packet(enemy_id):
return { "op_code" : Opcodes.ENEMY_DESPAWN, "enemy_id" : enemy_id }
static func create_item_craft_ok_packet(slot : int, item_id : int):
return { "op_code" : Opcodes.ITEM_CRAFT_OK, "slot" : slot, "item_id" : item_id}
static func create_item_craft_nok_packet():
return { "op_code" : Opcodes.ITEM_CRAFT_NOK }
static func create_smelter_started_packet():
return { "op_code" : Opcodes.SMELTER_STARTED}
static func create_smelter_stopped_packet():
return { "op_code" : Opcodes.SMELTER_STOPPED}
static func create_inventory_slot_update_packet(slot : int, item_id : int, amount : int):
return {
"op_code" : Opcodes.INVENTORY_SLOT_UPDATE,
"slot" : slot, "item_id" : item_id, "amount" : amount}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment