diff --git a/data/sprites/hair_blonde.sprite b/data/sprites/hair_blonde.sprite new file mode 100644 index 0000000..a9120c3 --- /dev/null +++ b/data/sprites/hair_blonde.sprite @@ -0,0 +1,219 @@ +{ + +"male_walkcycle_hair_blonde_N" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blonde_W" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blonde_S" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blonde_E" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blonde_N" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blonde_W" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blonde_S" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blonde_E" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_hurt_hair_blonde_S" : { + "texture" : "std_hair/plain-male/blonde", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blonde_N" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blonde_W" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blonde_S" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blonde_E" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blonde_N" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blonde_W" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blonde_S" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blonde_E" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_hurt_hair_blonde_S" : { + "texture" : "std_hair/ponytail2-female/blonde", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +} + +} diff --git a/data/sprites/hair_blue.sprite b/data/sprites/hair_blue.sprite new file mode 100644 index 0000000..853ff4f --- /dev/null +++ b/data/sprites/hair_blue.sprite @@ -0,0 +1,219 @@ +{ + +"male_walkcycle_hair_blue_N" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blue_W" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blue_S" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_blue_E" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blue_N" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blue_W" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blue_S" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_blue_E" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_hurt_hair_blue_S" : { + "texture" : "std_hair/plain-male/blue", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blue_N" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blue_W" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blue_S" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_blue_E" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blue_N" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blue_W" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blue_S" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_blue_E" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_hurt_hair_blue_S" : { + "texture" : "std_hair/ponytail2-female/blue", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +} + +} diff --git a/data/sprites/hair_brunette.sprite b/data/sprites/hair_brunette.sprite new file mode 100644 index 0000000..7e663e9 --- /dev/null +++ b/data/sprites/hair_brunette.sprite @@ -0,0 +1,219 @@ +{ + +"male_walkcycle_hair_brunette_N" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_brunette_W" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_brunette_S" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_brunette_E" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_brunette_N" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_brunette_W" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_brunette_S" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_brunette_E" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_hurt_hair_brunette_S" : { + "texture" : "std_hair/plain-male/brunette", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_brunette_N" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_brunette_W" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_brunette_S" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_brunette_E" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_brunette_N" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_brunette_W" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_brunette_S" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_brunette_E" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_hurt_hair_brunette_S" : { + "texture" : "std_hair/ponytail2-female/brunette", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +} + +} diff --git a/data/sprites/hair_female.sprite b/data/sprites/hair_female.sprite index 84cf294..6d699da 100644 --- a/data/sprites/hair_female.sprite +++ b/data/sprites/hair_female.sprite @@ -105,4 +105,6 @@ "number_of_frames" : 6, "frame_time" : 100, "originx" : 32, - "originy" : 50 + "originy" : 50} + +} \ No newline at end of file diff --git a/data/sprites/hair_raven.sprite b/data/sprites/hair_raven.sprite new file mode 100644 index 0000000..1239d9f --- /dev/null +++ b/data/sprites/hair_raven.sprite @@ -0,0 +1,219 @@ +{ + +"male_walkcycle_hair_raven_N" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_raven_W" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_raven_S" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_walkcycle_hair_raven_E" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_raven_N" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_raven_W" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_raven_S" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_standing_hair_raven_E" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"male_hurt_hair_raven_S" : { + "texture" : "std_hair/plain-male/raven", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_raven_N" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 64, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_raven_W" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 64, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_raven_S" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 64, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_walkcycle_hair_raven_E" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 64, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 8, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_raven_N" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 0, + "topy" : 512, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_raven_W" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 0, + "topy" : 576, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_raven_S" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 0, + "topy" : 640, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_standing_hair_raven_E" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 0, + "topy" : 704, + "height" : 64, + "width" : 64, + "number_of_frames" : 1, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +}, + +"female_hurt_hair_raven_S" : { + "texture" : "std_hair/ponytail2-female/raven", + "topx" : 0, + "topy" : 1280, + "height" : 64, + "width" : 64, + "number_of_frames" : 6, + "frame_time" : 100, + "originx" : 32, + "originy" : 50 +} + +} diff --git a/data/sprites/std_hair.sprite b/data/sprites/std_hair.sprite index ccd5efd..0c36d96 100644 --- a/data/sprites/std_hair.sprite +++ b/data/sprites/std_hair.sprite @@ -8,8 +8,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_walkcycle_standard_hair_W" : { @@ -20,8 +20,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_walkcycle_standard_hair_S" : { @@ -32,8 +32,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_walkcycle_standard_hair_E" : { @@ -44,8 +44,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_standing_standard_hair_N" : { @@ -56,8 +56,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_standing_standard_hair_W" : { @@ -68,8 +68,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_standing_standard_hair_S" : { @@ -80,8 +80,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_standing_standard_hair_E" : { @@ -92,8 +92,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_slash_standard_hair_N" : { @@ -104,8 +104,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_slash_standard_hair_W" : { @@ -116,8 +116,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_slash_standard_hair_S" : { @@ -128,8 +128,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_slash_standard_hair_E" : { @@ -140,8 +140,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "male_hurt_standard_hair_S" : { @@ -152,8 +152,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 } } diff --git a/data/sprites/std_hair_female.sprite b/data/sprites/std_hair_female.sprite index 99a5328..aa8279d 100644 --- a/data/sprites/std_hair_female.sprite +++ b/data/sprites/std_hair_female.sprite @@ -8,8 +8,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_walkcycle_standard_hair_W" : { @@ -20,8 +20,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_walkcycle_standard_hair_S" : { @@ -32,8 +32,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_walkcycle_standard_hair_E" : { @@ -44,8 +44,8 @@ "width" : 64, "number_of_frames" : 8, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_standing_standard_hair_N" : { @@ -56,8 +56,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_standing_standard_hair_W" : { @@ -68,8 +68,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_standing_standard_hair_S" : { @@ -80,8 +80,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_standing_standard_hair_E" : { @@ -92,8 +92,8 @@ "width" : 64, "number_of_frames" : 1, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_slash_standard_hair_N" : { @@ -104,8 +104,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_slash_standard_hair_W" : { @@ -116,8 +116,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_slash_standard_hair_S" : { @@ -128,8 +128,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_slash_standard_hair_E" : { @@ -140,8 +140,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 }, "female_hurt_standard_hair_S" : { @@ -152,8 +152,8 @@ "width" : 64, "number_of_frames" : 6, "frame_time" : 100, - "originx" : 32, - "originy" : 50 + "originx" : 32, + "originy" : 50 } } diff --git a/src/ImGuiHairSelect.cpp b/src/ImGuiHairSelect.cpp new file mode 100644 index 0000000..9b4085a --- /dev/null +++ b/src/ImGuiHairSelect.cpp @@ -0,0 +1,125 @@ +/* +=========================================================================== + * Saland Adventures +Copyright (C) 2014-2024 Poul Sander + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see http://www.gnu.org/licenses/ + +Source information and contacts persons can be found at +https://github.com/sago007/saland +=========================================================================== + */ + +#include "ImGuiHairSelect.hpp" +#include "Libs/imgui/imgui.h" +#include "common.h" +#include "saland/globals.hpp" +#include + +ImGuiHairSelect::ImGuiHairSelect() { + currentHair = globalData.player.hair; + + // Define available hair options + hairOptions = { + {"standard_hair", "Redhead"}, + {"hair_blonde", "Blonde"}, + {"hair_brunette", "Brunette"}, + {"hair_raven", "Black"}, + {"hair_blue", "Blue"}, + {"hair_1", "Short Blue"} // The old male_hair_single_blue variant + }; +} + +bool ImGuiHairSelect::IsActive() { + return active; +} + +void ImGuiHairSelect::Draw(SDL_Renderer* target) { + // Center the menu window + ImGuiIO& io = ImGui::GetIO(); + ImVec2 window_size(400, 500); + ImVec2 window_pos( + (io.DisplaySize.x - window_size.x) * 0.5f, + (io.DisplaySize.y - window_size.y) * 0.5f + ); + + ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always); + ImGui::SetNextWindowSize(window_size, ImGuiCond_Always); + + if (!ImGui::Begin("Hair Select", &active, + ImGuiWindowFlags_NoResize | + ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoCollapse)) { + ImGui::End(); + return; + } + + // Center buttons horizontally + float button_width = 300.0f; + float button_height = 50.0f; + float window_width = ImGui::GetWindowSize().x; + float button_x = (window_width - button_width) * 0.5f; + + // Add some top spacing + ImGui::Dummy(ImVec2(0.0f, 30.0f)); + + // Display hair options as buttons + for (const auto& option : hairOptions) { + ImGui::SetCursorPosX(button_x); + + // Highlight current selection + if (option.id == currentHair) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.3f, 0.6f, 0.3f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.4f, 0.7f, 0.4f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.2f, 0.5f, 0.2f, 1.0f)); + } + + if (ImGui::Button(option.displayName.c_str(), ImVec2(button_width, button_height))) { + pendingHair = option.id; + } + + if (option.id == currentHair) { + ImGui::PopStyleColor(3); + } + + ImGui::Dummy(ImVec2(0.0f, 5.0f)); + } + + ImGui::End(); +} + +void ImGuiHairSelect::ProcessInput(const SDL_Event& event, bool& processed) { + // Handle Escape key to close menu + if (event.type == SDL_KEYDOWN) { + if (event.key.keysym.sym == SDLK_ESCAPE) { + active = false; + processed = true; + } + } +} + +void ImGuiHairSelect::SelectHair(const std::string& hairName) { + globalData.player.hair = hairName; + currentHair = hairName; + // Save player data + PlayerSave(); + active = false; +} + +void ImGuiHairSelect::Update() { + if (!pendingHair.empty()) { + SelectHair(pendingHair); + pendingHair.clear(); + } +} diff --git a/src/ImGuiHairSelect.hpp b/src/ImGuiHairSelect.hpp new file mode 100644 index 0000000..1660e9b --- /dev/null +++ b/src/ImGuiHairSelect.hpp @@ -0,0 +1,61 @@ +/* +=========================================================================== + * Saland Adventures +Copyright (C) 2014-2024 Poul Sander + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see http://www.gnu.org/licenses/ + +Source information and contacts persons can be found at +https://github.com/sago007/saland +=========================================================================== + */ + +#ifndef IMGUI_HAIR_SELECT_HPP +#define IMGUI_HAIR_SELECT_HPP + +#include "sago/GameStateInterface.hpp" +#include +#include + +struct SDL_Renderer; +union SDL_Event; + +class ImGuiHairSelect : public sago::GameStateInterface { +public: + ImGuiHairSelect(); + virtual bool IsActive() override; + virtual void Draw(SDL_Renderer* target) override; + virtual void ProcessInput(const SDL_Event& event, bool& processed) override; + virtual void Update() override; + + ImGuiHairSelect(const ImGuiHairSelect&) = delete; + ImGuiHairSelect& operator=(const ImGuiHairSelect&) = delete; + virtual ~ImGuiHairSelect() = default; + +private: + void SelectHair(const std::string& hairName); + + bool active = true; + std::string pendingHair; + std::string currentHair; + + struct HairOption { + std::string id; + std::string displayName; + }; + + std::vector hairOptions; +}; + +#endif // IMGUI_HAIR_SELECT_HPP diff --git a/src/ImGuiMainMenu.cpp b/src/ImGuiMainMenu.cpp index 25fb222..02f1927 100644 --- a/src/ImGuiMainMenu.cpp +++ b/src/ImGuiMainMenu.cpp @@ -44,7 +44,7 @@ void ImGuiMainMenu::UpdateLabels() { void ImGuiMainMenu::Draw(SDL_Renderer* target) { // Center the menu window ImGuiIO& io = ImGui::GetIO(); - ImVec2 window_size(400, 500); + ImVec2 window_size(400, 570); ImVec2 window_pos( (io.DisplaySize.x - window_size.x) * 0.5f, (io.DisplaySize.y - window_size.y) * 0.5f @@ -68,7 +68,7 @@ void ImGuiMainMenu::Draw(SDL_Renderer* target) { float button_x = (window_width - button_width) * 0.5f; // Add some top spacing - ImGui::SetCursorPosY(50); + ImGui::Dummy(ImVec2(0.0f, 30.0f)); // Start button ImGui::SetCursorPosX(button_x); @@ -90,6 +90,13 @@ void ImGuiMainMenu::Draw(SDL_Renderer* target) { pendingAction = PendingAction::PlayerSelect; } + // Hair Select button + ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10); + ImGui::SetCursorPosX(button_x); + if (ImGui::Button("Hair Style", ImVec2(button_width, button_height))) { + pendingAction = PendingAction::HairSelect; + } + // Options button ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10); ImGui::SetCursorPosX(button_x); @@ -131,6 +138,9 @@ void ImGuiMainMenu::ExecutePendingAction() { runPlayerSelect(); UpdateLabels(); break; + case PendingAction::HairSelect: + runHairSelect(); + break; case PendingAction::Options: runMenuOptions(); break; diff --git a/src/ImGuiMainMenu.hpp b/src/ImGuiMainMenu.hpp index ca8e1e8..f792b73 100644 --- a/src/ImGuiMainMenu.hpp +++ b/src/ImGuiMainMenu.hpp @@ -34,6 +34,7 @@ union SDL_Event; void runStartGame(); void runWorldSelect(); void runPlayerSelect(); +void runHairSelect(); void runMenuOptions(); void runHelpAbout(); @@ -55,6 +56,7 @@ private: StartGame, WorldSelect, PlayerSelect, + HairSelect, Options, About }; diff --git a/src/saland.cpp b/src/saland.cpp index c6f4b75..42d9339 100644 --- a/src/saland.cpp +++ b/src/saland.cpp @@ -53,6 +53,7 @@ https://github.com/salandgame/saland #include "ImGuiMainMenu.hpp" #include "ImGuiWorldSelect.hpp" #include "ImGuiPlayerSelect.hpp" +#include "ImGuiHairSelect.hpp" #include "ImGuiOptions.hpp" #include "common.h" @@ -325,6 +326,11 @@ void runPlayerSelect() { RunGameState(m); } +void runHairSelect() { + ImGuiHairSelect m; + RunGameState(m); +} + void ResetFullscreen() { sago::SagoDataHolder& dataHolder = *globalData.dataHolder; diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index 29f66ff..e9b3fba 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp @@ -220,13 +220,13 @@ static SpawnPoint GetSpawnpoint(const sago::tiled::TileMap& tm) { return ret; } -static void PlayerSave() { +void PlayerSave() { std::string playername = Config::getInstance()->getString("player"); nlohmann::json j = globalData.player; sago::WriteFileContent(std::format("players/{}.json", playername).c_str(), j.dump()); } -static void PlayerLoad() { +void PlayerLoad() { std::string playername = Config::getInstance()->getString("player"); nlohmann::json j; std::string filename = std::format("players/{}.json", playername); diff --git a/src/saland/globals.hpp b/src/saland/globals.hpp index d7f8772..98ca78e 100644 --- a/src/saland/globals.hpp +++ b/src/saland/globals.hpp @@ -65,5 +65,9 @@ struct GlobalData { extern GlobalData globalData; +// Player save/load functions +void PlayerSave(); +void PlayerLoad(); + #endif /* GLOBALS_HPP */ diff --git a/src/saland/model/Player.cpp b/src/saland/model/Player.cpp index c3e06bb..ab9682e 100644 --- a/src/saland/model/Player.cpp +++ b/src/saland/model/Player.cpp @@ -24,10 +24,13 @@ https://github.com/sago007/saland #include "Player.hpp" void to_json(nlohmann::json& j, const Player& p) { - j = nlohmann::json{ {"race", p.race}, {"item_inventory", p.item_inventory} }; + j = nlohmann::json{ {"race", p.race}, {"hair", p.hair}, {"item_inventory", p.item_inventory} }; } void from_json(const nlohmann::json& j, Player& p) { j.at("race").get_to(p.race); + if (j.contains("hair")) { + j.at("hair").get_to(p.hair); + } j.at("item_inventory").get_to(p.item_inventory); } \ No newline at end of file diff --git a/src/saland/model/Player.hpp b/src/saland/model/Player.hpp index 2e94e92..dc282e2 100644 --- a/src/saland/model/Player.hpp +++ b/src/saland/model/Player.hpp @@ -32,11 +32,12 @@ struct Player { Player() {}; std::string save_name="player1"; std::string race = "female"; + std::string hair = "standard_hair"; std::string get_visible_race() { return this->race; } std::string get_visible_hair() { - return "standard_hair"; + return this->hair; } std::string get_visible_bottom() { return "pants_1";