chichilku3 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/bin/chichilku3 +3 -0
  3. data/bin/chichilku3-server +3 -0
  4. data/client.json +6 -0
  5. data/lib/client/chichilku3.rb +18 -0
  6. data/lib/client/client.rb +289 -0
  7. data/lib/client/client_cfg.rb +15 -0
  8. data/lib/client/gui.rb +492 -0
  9. data/lib/client/img/background1024x512.png +0 -0
  10. data/lib/client/img/battle1024x576.png +0 -0
  11. data/lib/client/img/connecting1024x512.png +0 -0
  12. data/lib/client/img/grass1024x512.png +0 -0
  13. data/lib/client/img/grey128.png +0 -0
  14. data/lib/client/img/menu1920x1080.png +0 -0
  15. data/lib/client/img/stick128/stick0.png +0 -0
  16. data/lib/client/img/stick128/stick1.png +0 -0
  17. data/lib/client/img/stick128/stick2.png +0 -0
  18. data/lib/client/img/stick128/stick3.png +0 -0
  19. data/lib/client/img/stick128/stick4.png +0 -0
  20. data/lib/client/img/stick128/stick5.png +0 -0
  21. data/lib/client/img/stick128/stick_crouching0.png +0 -0
  22. data/lib/client/img/stick128/stick_crouching1.png +0 -0
  23. data/lib/client/img/stick128/stick_crouching2.png +0 -0
  24. data/lib/client/img/stick128/stick_crouching3.png +0 -0
  25. data/lib/client/img/stick128/stick_crouching4.png +0 -0
  26. data/lib/client/img/stick128/stick_crouching5.png +0 -0
  27. data/lib/client/scoreboard.rb +25 -0
  28. data/lib/client/test.rb +39 -0
  29. data/lib/client/text.rb +86 -0
  30. data/lib/server/chichilku3_server.rb +293 -0
  31. data/lib/server/gamelogic.rb +121 -0
  32. data/lib/server/server_cfg.rb +6 -0
  33. data/lib/share/config.rb +53 -0
  34. data/lib/share/console.rb +18 -0
  35. data/lib/share/network.rb +145 -0
  36. data/lib/share/player.rb +286 -0
  37. data/server.json +4 -0
  38. metadata +81 -0
@@ -0,0 +1,286 @@
1
+ # Player used by Client and Server
2
+ require_relative 'console'
3
+ require_relative 'network'
4
+
5
+ SPAWN_X = 512
6
+ SPAWN_Y = 100
7
+
8
+ class Player
9
+ attr_accessor :x, :y, :dy, :dx, :id, :name, :score, :state, :dead, :dead_ticks, :was_crouching
10
+ attr_reader :collide, :collide_str, :img_index, :version, :w, :h
11
+
12
+ def initialize(id, score, x = nil, y = nil, name = 'def', ip = nil)
13
+ @id = id
14
+ @x = x.nil? ? SPAWN_X : x
15
+ @y = y.nil? ? SPAWN_Y : y
16
+ @w = TILE_SIZE / 2
17
+ @h = TILE_SIZE
18
+ @dx = 0
19
+ @dy = 0
20
+ @collide = {up: false, down: false, right: false, left: false}
21
+ @state = {bleeding: false, crouching: false}
22
+ @was_crouching = false
23
+ @name = name
24
+ @score = score
25
+ @dead = false # only used by server for now
26
+ @dead_ticks = 0
27
+
28
+ # used by client
29
+ @img_index = 0
30
+ @last_x = 0
31
+ @last_y = 0
32
+ @tick = 0
33
+ @not_changed_y = 0
34
+
35
+ # used by server
36
+ @version = nil
37
+ @ip = ip
38
+ end
39
+
40
+ ###############
41
+ # client only #
42
+ ###############
43
+
44
+ def draw_tick
45
+ @tick += 1
46
+ update_img
47
+ end
48
+
49
+ def update_img
50
+ return if @tick % 5 != 0
51
+ if @x != @last_x
52
+ new_x = true
53
+ end
54
+ if @y != @last_y
55
+ new_y = true
56
+ @not_changed_y = 0
57
+ else
58
+ @not_changed_y += 1
59
+ end
60
+
61
+ if new_x || new_y
62
+ @img_index += 1
63
+ @img_index = 0 if @img_index > 4
64
+ # $console.log "img updated to: #{@img_index}"
65
+ end
66
+ @last_x = @x
67
+ @last_y = @y
68
+ # if @not_changed_y > 10
69
+ # $console.log "player is chillin"
70
+ # @img_index = 5
71
+ # end
72
+ end
73
+
74
+ #####################
75
+ # client and server #
76
+ #####################
77
+ def self.get_player_index_by_id(players, id)
78
+ players.index(get_player_by_id(players, id))
79
+ end
80
+
81
+ def self.get_player_by_id(players, id)
82
+ players.find { |player| id == player.id }
83
+ end
84
+
85
+ def self.update_player(players, id, x, y, score)
86
+ player = get_player_by_id(players, id)
87
+ player.x = x
88
+ player.y = y
89
+ player.score = score
90
+ player
91
+ end
92
+
93
+ ###############
94
+ # server only #
95
+ ###############
96
+
97
+ def set_version(version)
98
+ @version = version
99
+ end
100
+
101
+ def tick
102
+ move_x(@dx)
103
+ move_y(@dy)
104
+ @dx = normalize_zero(@dx)
105
+ @dy = normalize_zero(@dy)
106
+ check_out_of_world
107
+ end
108
+
109
+ def check_player_collide(other)
110
+ # $console.log "x: #{@x} y: #{@y} ox: #{other.x} oy: #{other.y}"
111
+ # x crash is more rare so make it the outer condition
112
+ if other.x + other.w > @x && other.x < @x + @w
113
+ if other.y + other.h > @y && other.y < @y + @h
114
+ # $console.log "collide!"
115
+ return @x < other.x ? -7 : 7
116
+ end
117
+ end
118
+ return 0
119
+ end
120
+
121
+ # def check_out_of_world #die
122
+ # # y
123
+ # if @y < 0
124
+ # die
125
+ # elsif @y > WINDOW_SIZE_Y
126
+ # die
127
+ # end
128
+ # # x ( comment me out to add the glitch feature agian )
129
+ # if @x < 0
130
+ # die
131
+ # elsif @x > WINDOW_SIZE_X - TILE_SIZE - 1
132
+ # die
133
+ # end
134
+ # end
135
+ def check_out_of_world # swap size
136
+ # y
137
+ if @y < 0
138
+ die
139
+ elsif @y > WINDOW_SIZE_Y
140
+ die
141
+ end
142
+ # x ( comment me out to add the glitch feature agian )
143
+ if @x < 0
144
+ @x = WINDOW_SIZE_X - @w - 2
145
+ elsif @x > WINDOW_SIZE_X - @w - 1
146
+ @x = 0
147
+ end
148
+ end
149
+
150
+ def die
151
+ $console.log("[death] id=#{@id} name='#{@name}'")
152
+ @x = SPAWN_X
153
+ @y = SPAWN_Y
154
+ end
155
+
156
+ #TODO: check for collision before update
157
+ # if move_left or move_right set u on a collided field
158
+ # dont update the position or slow down speed
159
+ # idk make sure to not get stuck in walls
160
+ def move_left
161
+ # @dx = -8
162
+ @x -= state[:crouching] ? 4 : 8
163
+ end
164
+
165
+ def move_right
166
+ # @dx = 8
167
+ @x += state[:crouching] ? 4 : 8
168
+ end
169
+
170
+ def apply_force(x, y)
171
+ @dx += x
172
+ @dy += y
173
+ end
174
+
175
+ def do_jump
176
+ return if !@collide[:down]
177
+
178
+ if @dead
179
+ @dy = -5
180
+ else
181
+ @dy = state[:crouching] ? -20 : -30
182
+ end
183
+ end
184
+
185
+ def add_score(score = 1)
186
+ @score = (@score + score).clamp(NET_MIN_INT, NET_MAX_INT)
187
+ end
188
+
189
+ def collide_string
190
+ str = "collide:\n"
191
+ str += "down: #{@collide[:down]} up: #{@collide[:up]}\n"
192
+ str += "left: #{@collide[:left]} right: #{@collide[:right]}"
193
+ str
194
+ end
195
+
196
+ def do_collide(position, value)
197
+ if position == :right && @dx > 0
198
+ @dx = 0
199
+ elsif position == :left && @dx < 0
200
+ @dx = 0
201
+ elsif position == :down && @dy > 0
202
+ @dy = 0
203
+ elsif position == :up && @dy < 0
204
+ @dy = 0
205
+ end
206
+ @collide[position] = value
207
+ end
208
+
209
+ def reset_collide
210
+ @collide = {up: false, down: false, right: false, left: false}
211
+ end
212
+
213
+ ##
214
+ # Creates name package str
215
+ #
216
+ # only used by server
217
+ #
218
+ # @return [String] partial network packet
219
+
220
+ def to_n_pck
221
+ name = @name.ljust(5, '_')
222
+ # format("%02d#{name}", @id) # old 2 char ids
223
+ "#{@id}#{net_pack_int(@score)}#{name}" # new 1 char id
224
+ end
225
+
226
+ def to_s
227
+ # "#{'%02d' % @id}#{'%03d' % @x}#{'%03d' % @y}" # old 2 char ids
228
+ # "#{@id}#{net_pack_int(@score)}#{'%03d' % @x}#{'%03d' % @y}" # old 3 char coords
229
+ # unused
230
+ # V
231
+ "#{@id}#{net_pack_int(@score)}0#{state_to_net()}#{net_pack_bigint(@x, 2)}#{net_pack_bigint(@y, 2)}" # new 2 char coords
232
+ end
233
+
234
+ def state_to_net
235
+ @w = TILE_SIZE / 2
236
+ @h = TILE_SIZE
237
+ if @state[:bleeding] && @state[:crouching]
238
+ "s"
239
+ elsif @state[:bleeding]
240
+ "b"
241
+ elsif @state[:crouching]
242
+ @w = TILE_SIZE
243
+ @h = TILE_SIZE / 2
244
+ "c"
245
+ else
246
+ "0"
247
+ end
248
+ end
249
+
250
+ def net_to_state(net)
251
+ if net == "b"
252
+ @state = {bleeding: true, crouching: false}
253
+ elsif net == "c"
254
+ @state = {bleeding: false, crouching: true}
255
+ elsif net == "s"
256
+ @state = {bleeding: true, crouching: true}
257
+ else
258
+ @state = {bleeding: false, crouching: false}
259
+ end
260
+ end
261
+
262
+ private
263
+
264
+ def move_x(x)
265
+ return if x < 0 && @collide[:left]
266
+ return if x > 0 && @collide[:right]
267
+
268
+ @x += x
269
+ end
270
+
271
+ def move_y(y)
272
+ return if y < 0 && @collide[:up]
273
+ return if y > 0 && @collide[:down]
274
+
275
+ @y += y
276
+ end
277
+
278
+ # This method puts the value towards zero
279
+ # used to normalize speed
280
+ def normalize_zero(x)
281
+ return x if x.zero?
282
+
283
+ return x - 1 if x > 0
284
+ x + 1
285
+ end
286
+ end
data/server.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "port": 9900
3
+ }
4
+
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chichilku3
3
+ version: !ruby/object:Gem::Version
4
+ version: 5.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ChillerDragon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Simple 2d multiplayer stick figure battle game using the gosu (SDL2 based)
14
+ gem for client side graphics. The network protocol is tcp based.
15
+ email: ChillerDragon@gmail.com
16
+ executables:
17
+ - chichilku3
18
+ - chichilku3-server
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/chichilku3
23
+ - bin/chichilku3-server
24
+ - client.json
25
+ - lib/client/chichilku3.rb
26
+ - lib/client/client.rb
27
+ - lib/client/client_cfg.rb
28
+ - lib/client/gui.rb
29
+ - lib/client/img/background1024x512.png
30
+ - lib/client/img/battle1024x576.png
31
+ - lib/client/img/connecting1024x512.png
32
+ - lib/client/img/grass1024x512.png
33
+ - lib/client/img/grey128.png
34
+ - lib/client/img/menu1920x1080.png
35
+ - lib/client/img/stick128/stick0.png
36
+ - lib/client/img/stick128/stick1.png
37
+ - lib/client/img/stick128/stick2.png
38
+ - lib/client/img/stick128/stick3.png
39
+ - lib/client/img/stick128/stick4.png
40
+ - lib/client/img/stick128/stick5.png
41
+ - lib/client/img/stick128/stick_crouching0.png
42
+ - lib/client/img/stick128/stick_crouching1.png
43
+ - lib/client/img/stick128/stick_crouching2.png
44
+ - lib/client/img/stick128/stick_crouching3.png
45
+ - lib/client/img/stick128/stick_crouching4.png
46
+ - lib/client/img/stick128/stick_crouching5.png
47
+ - lib/client/scoreboard.rb
48
+ - lib/client/test.rb
49
+ - lib/client/text.rb
50
+ - lib/server/chichilku3_server.rb
51
+ - lib/server/gamelogic.rb
52
+ - lib/server/server_cfg.rb
53
+ - lib/share/config.rb
54
+ - lib/share/console.rb
55
+ - lib/share/network.rb
56
+ - lib/share/player.rb
57
+ - server.json
58
+ homepage: https://github.com/chichilku/chichilku3
59
+ licenses:
60
+ - Unlicense
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubygems_version: 3.0.3
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: Stick battle game
81
+ test_files: []