Created
September 14, 2022 15:13
-
-
Save rickwillcox/d111ab8e97ee33c914b2c2fbf3a1c7e7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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