Guest User

Untitled

a guest
Apr 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.52 KB | None | 0 0
  1. import random, sys
  2. from macros import *
  3. import __init__ as meta
  4.  
  5.  
  6. class Item:
  7. def __init__(self, images):
  8. self.items_floor = []
  9. self.images = images.values()
  10.  
  11. self.reset()
  12.  
  13. def reset(self):
  14. self.image = random.choice(self.images)
  15. self.size = self.image.get_size()
  16.  
  17. self.X = random.randint(0, RESOLUTION[WIDTH] - 200)
  18. self.Y = -self.size[HEIGHT]
  19.  
  20. self.center_X = self.X + self.size[WIDTH] // 2
  21. self.dY = 20 + random.randint(-5, 5)
  22.  
  23. @property
  24. def position(self):
  25. return self.X, self.Y
  26.  
  27. def hit_collapsing_line(self):
  28. return self.Y + self.size[HEIGHT] >= Context.collapsing_line
  29.  
  30. def hit_ground(self):
  31. return self.Y + self.size[HEIGHT] + self.dY >= RESOLUTION[HEIGHT]
  32.  
  33. def collapsed(self, basket):
  34. return basket.X - basket.size[WIDTH] < self.X < basket.X + basket.size[WIDTH]
  35.  
  36. def get_center(self):
  37. return self.center_X, self.Y
  38.  
  39. def add_item_floor(self, shirt):
  40. sitting_shirt = self.ItemThumbnail(shirt)
  41. self.items_floor.append(sitting_shirt)
  42.  
  43. def draw_items(self, screen):
  44. for shirt in self.items_floor:
  45. thumbnail = shirt.get_thumbnail()
  46. screen.blit(thumbnail[0], thumbnail[1])
  47.  
  48. class ItemThumbnail:
  49. def __init__(self, shirt):
  50. self.image = shirt.image
  51. self.position = shirt.X, shirt.Y
  52.  
  53. def get_thumbnail(self):
  54. return self.image, self.position
  55.  
  56.  
  57. class Basket(object):
  58. standard_speed = 3
  59. friction_coefficient = 1.5
  60.  
  61. def __init__(self):
  62. self.images = Context.load_basket_images()
  63. self.image = None
  64.  
  65. self.load = 0
  66. self.size = self.image.get_size()
  67.  
  68. self.X = -random.randint(750, 1300)
  69. self.Y = RESOLUTION[HEIGHT] - self.size[HEIGHT] - BOTTOM_PADDING
  70.  
  71. self.centerY = self.Y + self.size[HEIGHT] // 2
  72. self.half_width = self.size[WIDTH] // 2
  73.  
  74. self.direction = 1
  75. self.dX = 0
  76.  
  77. self.speed = self.standard_speed
  78. self.vel = self.direction * self.speed
  79.  
  80. def action(self, event):
  81. if event.type == pygame.KEYDOWN:
  82. if event.key == pygame.K_a:
  83. self.direction = -1
  84. elif event.key == pygame.K_d:
  85. self.direction = 1
  86. elif event.type == pygame.KEYUP:
  87. self.stop()
  88.  
  89. pressed_ = pygame.key.get_pressed()
  90. if pressed_[pygame.K_a]: #
  91. self.direction = -1 # solves double pressing bug
  92. elif pressed_[pygame.K_d]: #
  93. self.direction = 1 #
  94.  
  95. self.vel = self.direction * self.speed
  96.  
  97. def move(self, runtime=True):
  98. friction = 0
  99. if self.vel == 0 and not self.dX == 0:
  100. friction = -self.dX // abs(self.dX) * self.friction_coefficient
  101.  
  102. self.dX = int(self.dX + self.vel + friction)
  103. self.X += self.dX
  104.  
  105. if runtime:
  106. self.hit_edges()
  107.  
  108. @property
  109. def position(self):
  110. return self.X, self.Y
  111.  
  112. def entrance(self):
  113. if self.X > 0 and self.direction == 1:
  114. self.direction = -1
  115. self.vel = self.direction * self.speed
  116. elif self.dX < -30 and self.direction == -1:
  117. self.stop()
  118.  
  119. self.move(False)
  120.  
  121. def exit(self):
  122. if self.X + self.size[WIDTH] >= 0:
  123. self.dX -= self.standard_speed
  124.  
  125. def hit_edges(self):
  126. hit_left = self.X + self.dX < 0
  127. hit_right = self.X + self.dX + self.size[WIDTH] >= RESOLUTION[WIDTH]
  128. if hit_left or hit_right:
  129. self.X = 0 if hit_left else RESOLUTION[WIDTH] - self.size[WIDTH]
  130. self.dX = -self.dX / 2
  131.  
  132. def scores(self, context):
  133. if self.X + self.size[WIDTH] >= RESOLUTION[WIDTH] - 100:
  134. context.update_score(self.load)
  135. self.load = 0
  136.  
  137. def update(self):
  138. if self._load < len(self.images):
  139. self.image = self.images[self._load]
  140.  
  141. def get_center(self):
  142. return self.X + self.half_width, self.centerY
  143.  
  144. def stop(self):
  145. self.direction = 0
  146. self.vel = 0
  147.  
  148. @property
  149. def load(self):
  150. return self._load
  151.  
  152. @load.setter
  153. def load(self, value):
  154. self._load = value
  155. if value == 0:
  156. self.speed = 3
  157. else:
  158. self.speed -= self.speed / 2
  159. self.update()
  160.  
  161.  
  162. class Grandma(object):
  163. GRANDMA_STD_POSITION = 1400, 400
  164. speed = 3
  165.  
  166. def __init__(self):
  167. self.images = Context.load_grandma_images()
  168. self.image = self.images[0]
  169.  
  170. self.position = [RESOLUTION[WIDTH], self.GRANDMA_STD_POSITION[HEIGHT]]
  171.  
  172. def at_position(self):
  173. return self.position[WIDTH] <= self.GRANDMA_STD_POSITION[WIDTH]
  174.  
  175. def update(self, items_on_floor):
  176. if items_on_floor < len(self.images):
  177. self.image = self.images[items_on_floor]
  178. self.humor = items_on_floor
  179.  
  180. def entrance(self):
  181. if self.position[WIDTH] > self.GRANDMA_STD_POSITION[WIDTH]:
  182. self.position[WIDTH] -= self.speed
  183.  
  184. def exit(self):
  185. if self.position[WIDTH] <= RESOLUTION[WIDTH]:
  186. self.position[WIDTH] += self.speed
  187.  
  188.  
  189. class Background:
  190. def __init__(self, images):
  191. self.background = images[IMG_BACKGROUND]
  192. self.foreground = images[IMG_FOREGROUND]
  193.  
  194. self.cloud_manager = self.CloudManager(images[KEY_CLOUDS].values())
  195. self.cloud_manager.generate_cloud()
  196.  
  197. def draw(self, screen):
  198. screen.blit(self.background, (0, 0))
  199.  
  200. self.cloud_manager.move()
  201.  
  202. if self.cloud_manager.clouds[len(self.cloud_manager.clouds) - 1][1][WIDTH] <= self.cloud_manager.create_next:
  203. self.cloud_manager.generate_cloud()
  204.  
  205. clouds = self.cloud_manager.clouds
  206. for cloud in clouds:
  207. screen.blit(cloud[0], (cloud[1][WIDTH], cloud[1][HEIGHT]))
  208.  
  209. screen.blit(self.foreground, (0, 0))
  210.  
  211. class CloudManager:
  212. starting_X = RESOLUTION[WIDTH]
  213. cluster_max = 3
  214.  
  215. def __init__(self, images):
  216. self.images = images
  217. self.clouds = []
  218.  
  219. self.create_next = 0
  220.  
  221. def cloud_factory(self):
  222. image = random.choice(self.images)
  223. dX = -random.randint(1, 3) / 3
  224. position= self.starting_X, random.randint(-10, 400)
  225.  
  226. return image, position, dX
  227.  
  228. def generate_cloud(self):
  229. self.clouds.append(self.cloud_factory())
  230. self.create_next = random.randint(500, 1200)
  231.  
  232. def move(self):
  233. temp_cloud = []
  234. for i in range(0, len(self.clouds)):
  235. cloud = self.clouds[i]
  236. temp_cloud.append((cloud[0], (cloud[1][WIDTH] + cloud[2], cloud[1][HEIGHT]), cloud[2]))
  237.  
  238. self.clouds = temp_cloud
  239.  
  240. def get_clouds(self):
  241. return self.clouds
  242.  
  243.  
  244. class Context:
  245. fps = FPS
  246. collapsing_line = RESOLUTION[HEIGHT]
  247. delivering_line = RESOLUTION[WIDTH] - 200 # right edge minus grandma's width
  248. center_screen = RESOLUTION[WIDTH] // 2, RESOLUTION[HEIGHT] // 2
  249. best_score = 0
  250.  
  251. def __init__(self):
  252. pygame.init()
  253.  
  254. self.screen = pygame.display.set_mode(RESOLUTION, pygame.HWSURFACE | pygame.DOUBLEBUF)
  255.  
  256. pygame.display.set_caption(meta.__title__)
  257.  
  258. self.font = pygame.font.SysFont(FONT_TYPE, 50)
  259. self._images = get_image_map()
  260. self.score = 0
  261.  
  262. self.audio_score = load_audio(AUDIO_SCORE)
  263. self.audio_scream = load_audio(AUDIO_OVER_SCREAM)
  264. self.audio_load = load_audio(AUDIO_TAKE_ITEM)
  265.  
  266. pygame.mixer.music.load(RES_AUDIO + AUDIO_MAIN_THEME)
  267. self.start_music()
  268.  
  269. def get_image(self, key):
  270. return self._images[key]
  271.  
  272. def draw_text(self):
  273. text_score = TEXT_SCORE + str(self.score)
  274. text_best_score = TEXT_BEST_SCORE + str(self.best_score)
  275.  
  276. surface_score = self.font.render(text_score, False, FONT_COLOR)
  277. surface_best_score = self.font.render(text_best_score, False, FONT_COLOR)
  278.  
  279. self.screen.blit(surface_best_score, (50, 100))
  280. self.screen.blit(surface_score, (50, 50))
  281.  
  282. def update_score(self, load):
  283. self.score += load
  284. if self.score > self.best_score:
  285. self.best_score = self.score
  286.  
  287. @staticmethod
  288. def load_basket_images():
  289. basket_images = get_image_map()[KEY_BASKET]
  290. return (basket_images[IMG_BASKET_EMPTY],
  291. basket_images[IMG_BASKET_FULL],
  292. basket_images[IMG_BASKET_FULL_TOTAL],
  293. basket_images[IMG_BASKET_LOADED])
  294.  
  295. @staticmethod
  296. def load_grandma_images():
  297. grandma_images = get_image_map()[KEY_GRANDMA]
  298. return (grandma_images[IMG_GRANDMA_UNHAPPY],
  299. grandma_images[IMG_GRANDMA_MAD],
  300. grandma_images[IMG_GRANDMA_ANGRY],
  301. grandma_images[IMG_GRANDMA_RAGED])
  302.  
  303. @staticmethod
  304. def start_music():
  305. pygame.mixer.music.play(-1)
  306.  
  307. @staticmethod
  308. def set_collapsing_line(height):
  309. Context.collapsing_line = RESOLUTION[HEIGHT] - height
  310.  
  311. class Blinker:
  312. timer = 0
  313. position = 600, 500
  314.  
  315. def __init__(self, screen, text, lap=30):
  316. self.screen = screen
  317. self.text = text
  318. self.lap = lap
  319.  
  320. def update(self):
  321. self.timer += 1
  322. if self.timer < self.lap:
  323. self.screen.blit(self.text, self.position)
  324. elif self.timer == self.lap * 2:
  325. self.timer = 0
  326.  
  327. def __del__(self):
  328. self.timer = 0
  329.  
  330.  
  331. class Game:
  332. context = Context()
  333. background = Background(context.get_image(KEY_BACKGROUND))
  334. clock = pygame.time.Clock()
  335. fps = context.fps
  336. alpha = 255
  337.  
  338. def __init__(self):
  339. self.game_on = True
  340.  
  341. self.basket = Basket()
  342. self.item = Item(self.context.get_image(KEY_ITEMS))
  343. self.grandma = Grandma()
  344.  
  345. self.context.set_collapsing_line(self.basket.size[HEIGHT])
  346. self.fade_surface = pygame.Surface(RESOLUTION)
  347.  
  348. def run(self):
  349. self.start()
  350.  
  351. while self.game_on:
  352. self.event_loop()
  353. self.update()
  354. self.draw()
  355.  
  356. pygame.display.update()
  357. self.clock.tick(self.fps)
  358.  
  359. return self.end()
  360.  
  361. def event_loop(self):
  362. for event in pygame.event.get():
  363. if len(self.item.items_floor) >= 4:
  364. self.basket.stop()
  365. if self.basket.dX == 0:
  366. self.game_on = False
  367. else:
  368. self.basket.action(event)
  369.  
  370. if event.type == pygame.KEYDOWN:
  371. if event.key == pygame.K_ESCAPE:
  372. self.pause()
  373. if event.type == pygame.QUIT:
  374. self.quit()
  375.  
  376. def pause(self):
  377. text = self.context.font.render(TEXT_PAUSE, False, FONT_COLOR)
  378. blinker = self.context.Blinker(self.context.screen, text)
  379.  
  380. on_pause = True
  381. while on_pause:
  382. for event in pygame.event.get():
  383. if event.type == pygame.KEYDOWN:
  384. if event.key == pygame.K_SPACE:
  385. on_pause = False
  386. elif event.type == pygame.QUIT:
  387. self.quit()
  388.  
  389. self.draw()
  390.  
  391. blinker.update()
  392. pygame.display.update()
  393.  
  394. self.clock.tick(self.fps)
  395.  
  396. def update(self):
  397. self.basket.move()
  398. self.basket.scores(self.context)
  399.  
  400. print self.context.score
  401. if self.item.hit_collapsing_line():
  402. if self.item.collapsed(self.basket):
  403. self.basket.load += 1
  404. self.item.reset()
  405. elif self.item.hit_ground():
  406. self.item.add_item_floor(self.item)
  407. self.item.reset()
  408.  
  409. self.item.Y = self.item.Y + self.item.dY
  410.  
  411. def draw(self):
  412. self.background.draw(self.context.screen)
  413. self.item.draw_items(self.context.screen)
  414.  
  415. self.grandma.update(len(self.item.items_floor))
  416.  
  417. self.context.screen.blit(self.grandma.image, self.grandma.position)
  418. self.context.screen.blit(self.item.image, self.item.position)
  419. self.context.screen.blit(self.basket.image, self.basket.position)
  420.  
  421. self.context.draw_text()
  422.  
  423. pygame.display.flip()
  424.  
  425. def start(self):
  426. text = self.context.font.render(TEXT_START, False, FONT_COLOR)
  427. blinker = self.context.Blinker(self.context.screen, text)
  428.  
  429. animation = True
  430. while animation:
  431. self.grandma.entrance()
  432. self.basket.entrance()
  433.  
  434. self.background.draw(self.context.screen)
  435.  
  436. self.context.screen.blit(self.grandma.image, self.grandma.position)
  437. self.context.screen.blit(self.basket.image, self.basket.position)
  438.  
  439. if self.grandma.position[WIDTH] <= self.grandma.GRANDMA_STD_POSITION[WIDTH]:
  440. blinker.update()
  441. for event in pygame.event.get():
  442. if event.type == pygame.KEYDOWN:
  443. if event.key == pygame.K_SPACE:
  444. animation = False
  445. elif event.type == pygame.QUIT:
  446. self.quit()
  447.  
  448. self.fade(-1)
  449.  
  450. pygame.display.flip()
  451. pygame.display.update()
  452.  
  453. self.clock.tick(self.fps)
  454.  
  455. def end(self):
  456. self.context.score = 0
  457.  
  458. over_images = get_image_map()[KEY_OVER]
  459. face_open = over_images[IMG_OVER_FACE_OPEN]
  460. face_closed = over_images[IMG_OVER_FACE_CLOSED]
  461.  
  462. face = face_closed
  463. body = over_images[IMG_OVER_BODY]
  464.  
  465. face_position = [660, RESOLUTION[HEIGHT] + 100]
  466.  
  467. text = self.context.font.render(TEXT_LOST, False, (255, 255, 255))
  468. blinker = self.context.Blinker(self.context.screen, text)
  469. dir = 1
  470. dY = 0
  471. pressed_start = False
  472.  
  473. animation = True
  474. while animation: # TODO improve this
  475. self.background.draw(self.context.screen)
  476. self.item.draw_items(self.context.screen)
  477.  
  478. self.context.screen.blit(self.basket.image, self.basket.position)
  479.  
  480. if blinker.timer % 10:
  481. dir = -dir
  482.  
  483. face_position[WIDTH] += dir * (blinker.timer % 5)
  484.  
  485. if self.grandma.position[WIDTH] >= RESOLUTION[WIDTH] and face_position[HEIGHT] >= 150:
  486. dY += 5
  487. face_position[HEIGHT] -= 5
  488. self.context.screen.blit(body, (0, RESOLUTION[HEIGHT] - dY))
  489. self.context.screen.blit(face, face_position)
  490. elif self.basket.dX == 0:
  491. self.grandma.exit()
  492. self.context.screen.blit(self.grandma.image, self.grandma.position)
  493.  
  494. if face_position[HEIGHT] <= 150:
  495. self.context.screen.blit(body, (0, RESOLUTION[HEIGHT] - dY))
  496. self.context.screen.blit(face, face_position)
  497. if blinker.timer == blinker.lap:
  498. face = face_open
  499.  
  500. if face == face_open:
  501. self.basket.exit()
  502.  
  503. for event in pygame.event.get():
  504. if event.type == pygame.KEYDOWN:
  505. if event.key == pygame.K_SPACE:
  506. pressed_start = True
  507. elif event.type == pygame.QUIT or event.type == pygame.K_ESCAPE:
  508. self.quit()
  509.  
  510. if pressed_start:
  511. self.fade()
  512. else:
  513. blinker.update()
  514.  
  515. pygame.display.flip()
  516. pygame.display.update()
  517.  
  518. self.clock.tick(self.fps)
  519. if self.alpha >= 255:
  520. return True
  521. return False
  522.  
  523. def fade(self, multiplier=1):
  524. if 0 <= self.alpha <= 255:
  525. self.alpha += 8 * multiplier
  526. self.fade_surface.set_alpha(self.alpha)
  527. self.fade_surface.fill((0, 0, 0))
  528. self.context.screen.blit(self.fade_surface, (0, 0))
  529. elif self.alpha < 0:
  530. self.alpha = 0
  531. elif self.alpha > 255:
  532. self.alpha = 255
  533.  
  534. @staticmethod
  535. def quit():
  536. pygame.quit()
  537. sys.exit()
  538.  
  539. import pygame
  540. import os
  541.  
  542.  
  543. WIDTH, HEIGHT = 0, 1
  544. RESOLUTION = 1600, 900
  545. FPS = 30
  546.  
  547. BOTTOM_PADDING = 50
  548.  
  549. DIR_RES = "resources/"
  550. RES_IMAGES = DIR_RES + "images/"
  551. RES_AUDIO = DIR_RES + "audio/"
  552.  
  553. FONT_TYPE = "Comic Sans MS"
  554. FONT_COLOR = (255, 255, 255)
  555.  
  556. # static elements
  557. IMG_BACKGROUND = "background.png"
  558. IMG_FOREGROUND = "foreground.png"
  559.  
  560. # basket states
  561. IMG_BASKET_EMPTY = "basket.png"
  562. IMG_BASKET_FULL = "basket_full.png"
  563. IMG_BASKET_FULL_TOTAL = "basket_full_total.png"
  564. IMG_BASKET_LOADED = "basket_loaded.png"
  565. IMG_BASKET_INCLINED_L = "basket_inclined_left.png"
  566. IMG_BASKET_INCLINED_R = "basket_inclined_right.png"
  567.  
  568. # grandma states
  569. IMG_GRANDMA_UNHAPPY = "grandma_unhappy.png"
  570. IMG_GRANDMA_MAD = "grandma_mad.png"
  571. IMG_GRANDMA_ANGRY = "grandma_angry.png"
  572. IMG_GRANDMA_RAGED = "grandma_raged.png"
  573.  
  574. # falling items
  575. IMG_SHIRT_BLUE = "item_shirt_blue.png"
  576. IMG_SHIRT_GREEN = "item_shirt_green.png"
  577. IMG_SHIRT_RED = "item_shirt_red.png"
  578. IMG_SHIRT_ORANGE = "item_shirt_orange.png"
  579. IMG_SHIRT_PURPLE = "item_shirt_purple.png"
  580. IMG_NECKLACE = "item_necklace.png"
  581. IMG_PAN = "item_pan.png"
  582. IMG_BOXERS = "item_boxers.png"
  583.  
  584. # clouds and passing elements
  585. IMG_CLOUD_S = "cloud_S.png"
  586. IMG_CLOUD_MS = "cloud_MS.png"
  587. IMG_CLOUD_M = "cloud_M.png"
  588. IMG_CLOUD_ML = "cloud_ML.png"
  589. IMG_CLOUD_L = "cloud_L.png"
  590. IMG_CLOUD_XL = "cloud_XL.png"
  591.  
  592. # game over screen
  593. IMG_OVER_FACE_OPEN = "over_face_open.png"
  594. IMG_OVER_FACE_CLOSED = "over_face_closed.png"
  595. IMG_OVER_BODY = "over_grandma_body.png"
  596.  
  597. KEY_CLOUDS = "clouds"
  598. KEY_BACKGROUND = "background"
  599. KEY_BASKET = "basket_states"
  600. KEY_ITEMS = "items"
  601. KEY_GRANDMA = "grandma"
  602. KEY_OVER = "over"
  603.  
  604. KEY_HUMOR_UNHAPPY = "unhappy" # neutral state
  605. KEY_HUMOR_MAD = "mad"
  606. KEY_HUMOR_ANGRY = "angry"
  607. KEY_HUMOR_RAGED = "raged" # one more item on the ground and the player loses the game
  608.  
  609. TEXT_START = "space bar to help grandma"
  610. TEXT_LOST = "space bar to try again"
  611. TEXT_PAUSE = "space bar to continue"
  612. TEXT_SCORE = "GIVEN: "
  613. TEXT_BEST_SCORE = "BEST : "
  614.  
  615. # audio TODO misses converting this to .wav
  616. AUDIO_MAIN_THEME = "main_theme.mp3"
  617. AUDIO_SCORE = "action_score.mp3"
  618. AUDIO_TAKE_ITEM = "action_take_item.mp3"
  619. AUDIO_OVER_SCREAM = "over_scream.mp3"
  620.  
  621.  
  622. def load_audio(name):
  623. return pygame.mixer.Sound(RES_AUDIO + name)
  624.  
  625.  
  626. def load_image(name):
  627. image_path = RES_IMAGES + name
  628. return pygame.image.load(os.path.join(image_path)).convert_alpha()
  629.  
  630.  
  631. def get_image_map():
  632. return {
  633. KEY_GRANDMA :
  634. {IMG_GRANDMA_UNHAPPY : load_image(IMG_GRANDMA_UNHAPPY),
  635. IMG_GRANDMA_MAD : load_image(IMG_GRANDMA_MAD),
  636. IMG_GRANDMA_ANGRY : load_image(IMG_GRANDMA_ANGRY),
  637. IMG_GRANDMA_RAGED : load_image(IMG_GRANDMA_RAGED)},
  638. KEY_BASKET :
  639. {IMG_BASKET_EMPTY : load_image(IMG_BASKET_EMPTY),
  640. IMG_BASKET_FULL : load_image(IMG_BASKET_FULL),
  641. IMG_BASKET_FULL_TOTAL : load_image(IMG_BASKET_FULL_TOTAL),
  642. IMG_BASKET_LOADED : load_image(IMG_BASKET_LOADED)},
  643. KEY_ITEMS :
  644. {IMG_SHIRT_BLUE : load_image(IMG_SHIRT_BLUE),
  645. IMG_SHIRT_RED : load_image(IMG_SHIRT_RED),
  646. IMG_SHIRT_GREEN : load_image(IMG_SHIRT_GREEN),
  647. IMG_SHIRT_ORANGE : load_image(IMG_SHIRT_ORANGE),
  648. IMG_SHIRT_PURPLE : load_image(IMG_SHIRT_PURPLE),
  649. IMG_BOXERS : load_image(IMG_BOXERS),
  650. IMG_NECKLACE : load_image(IMG_NECKLACE),
  651. IMG_PAN : load_image(IMG_PAN)},
  652. KEY_BACKGROUND :
  653. {IMG_BACKGROUND : load_image(IMG_BACKGROUND),
  654. IMG_FOREGROUND : load_image(IMG_FOREGROUND),
  655. KEY_CLOUDS:
  656. {IMG_CLOUD_S : load_image(IMG_CLOUD_S),
  657. IMG_CLOUD_MS : load_image(IMG_CLOUD_MS),
  658. IMG_CLOUD_M : load_image(IMG_CLOUD_M),
  659. IMG_CLOUD_ML : load_image(IMG_CLOUD_ML),
  660. IMG_CLOUD_L : load_image(IMG_CLOUD_L),
  661. IMG_CLOUD_XL : load_image(IMG_CLOUD_XL)}
  662. },
  663. KEY_OVER :
  664. {IMG_OVER_FACE_OPEN : load_image(IMG_OVER_FACE_OPEN),
  665. IMG_OVER_FACE_CLOSED : load_image(IMG_OVER_FACE_CLOSED),
  666. IMG_OVER_BODY : load_image(IMG_OVER_BODY)}
  667. }
Add Comment
Please, Sign In to add comment