Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 119.13 KB | None | 0 0
  1.  # Fartman
  2. import pygame
  3. import sys
  4. import os
  5. import random
  6. import re
  7. import math
  8. import time
  9.  
  10. width = 1920
  11. height = 1080
  12. pygame.mixer.init()
  13.  
  14. white = (255, 255, 255)
  15. black = (0, 0, 0)
  16. red = (255, 0, 0)
  17. green = (0,255,0)
  18. blue = (0, 0, 255)
  19. yellow = (255, 255, 0)
  20. cyan = (0, 255, 255)
  21.  
  22. all_sprites = []
  23. gravity_sprites = []
  24. floors = []
  25. enemy_sprites = []
  26. box_sprites = pygame.sprite.Group()
  27.  
  28. box_sprites2 = []
  29. powerup_sprites = []
  30. mm_sprites = []
  31. projectile_sprites = []
  32. no_move_enemy_sprites = []
  33.  
  34. scroll_sprites = []
  35. edit_temp_sprites = []
  36. rotating_orbs_sprites = []
  37. portapotty_sprites = []
  38.  
  39. fartman_imgs = []
  40. level_1_load = True
  41. level_2_load = False
  42.  
  43. global gravity
  44. gravity = 1.8
  45. salami = False
  46.  
  47. # MAKE SOUNDTRACK
  48. # USE CENTERX TO HELP HITBOXES IF THERE ARE ISSUES
  49.  
  50. if __name__ == '__main__':
  51.  
  52.     pygame.init()
  53.     window = pygame.display.set_mode((width, height))
  54.     pygame.display.set_caption('Fartman')
  55.     running = True
  56.     clock = pygame.time.Clock()
  57.  
  58.     main_menu_img = pygame.image.load('fartman.png').convert()
  59.     new_img = pygame.image.load('new.png').convert()
  60.     continue_img = pygame.image.load('continue.png').convert()
  61.     quit_img = pygame.image.load('quit.png').convert()
  62.  
  63.     new_hl_img = pygame.image.load('new_hl.png').convert()
  64.     continue_hl_img = pygame.image.load('continue_hl.png').convert()
  65.     quit_hl_img = pygame.image.load('quit_hl.png').convert()
  66.  
  67.     class Main_Menu(pygame.sprite.Sprite):
  68.         def __init__(self):
  69.             pygame.sprite.Sprite.__init__(self)
  70.             self.image = main_menu_img
  71.             self.rect = self.image.get_rect()
  72.             self.showing = True
  73.  
  74.             self.new = pygame.sprite.Sprite()
  75.             self.new.image = new_img
  76.             self.new.og_image = new_img
  77.             self.new.highlighted = False
  78.             self.new.highlighted_img = new_hl_img
  79.             self.new.rect = self.new.image.get_rect()
  80.             self.new.rect.centerx, self.new.rect.centery = width / 2, 350
  81.             self.new.coords = (width / 2, 350)
  82.  
  83.             self.continue_ = pygame.sprite.Sprite()
  84.             self.continue_.image = continue_img
  85.             self.continue_.og_image = continue_img
  86.             self.continue_.highlighted = False
  87.             self.continue_.highlighted_img = continue_hl_img
  88.             self.continue_.rect = self.continue_.image.get_rect()
  89.             self.continue_.rect.centerx, self.continue_.rect.centery = width / 2, 550
  90.             self.continue_.coords = (width / 2, 550)
  91.  
  92.             self.quit = pygame.sprite.Sprite()
  93.             self.quit.image = quit_img
  94.             self.quit.og_image = quit_img
  95.             self.quit.highlighted = False
  96.             self.quit.highlighted_img = quit_hl_img
  97.             self.quit.rect = self.quit.image.get_rect()
  98.             self.quit.rect.centerx, self.quit.rect.centery = width / 2, 750
  99.             self.quit.coords = (width / 2, 750)
  100.  
  101.             mm_sprites.extend([self.new, self.continue_, self.quit])
  102.  
  103.     main_menu = Main_Menu()
  104.     mm_sprites.insert(0,main_menu)
  105.    
  106.     fartman_standing_1_img = pygame.image.load('default_Fartman_Standing_1.png').convert()
  107.    
  108.     fartman_running_right_1_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_1.png').convert(), (int(240/4), int(442/4)))
  109.     fartman_running_right_2_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_2.png').convert(), (int(238/4), int(426/4)))
  110.     fartman_running_right_3_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_3.png').convert(), (int(169/4), int(428/4)))
  111.     fartman_running_right_4_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_4.png').convert(), (int(196/4), int(432/4)))
  112.     fartman_running_right_5_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_5.png').convert(), (int(258/4), int(444/4)))
  113.     fartman_running_right_6_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_6.png').convert(), (int(271/4), int(447/4)))
  114.     fartman_running_right_7_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_7.png').convert(), (int(174/4), int(428/4)))
  115.     fartman_running_right_8_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningRight_8.png').convert(), (int(183/4), int(429/4)))
  116.  
  117.     fartman_running_left_1_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_1.png').convert(), (int(240/4), int(442/4)))
  118.     fartman_running_left_2_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_2.png').convert(), (int(238/4), int(426/4)))
  119.     fartman_running_left_3_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_3.png').convert(), (int(169/4), int(428/4)))
  120.     fartman_running_left_4_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_4.png').convert(), (int(196/4), int(432/4)))
  121.     fartman_running_left_5_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_5.png').convert(), (int(258/4), int(444/4)))
  122.     fartman_running_left_6_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_6.png').convert(), (int(271/4), int(447/4)))
  123.     fartman_running_left_7_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_7.png').convert(), (int(174/4), int(428/4)))
  124.     fartman_running_left_8_img = pygame.transform.scale(pygame.image.load('default_NewFartman_runningLeft_8.png').convert(), (int(183/4), int(429/4)))
  125.  
  126.     fartman_imgs.extend([fartman_running_right_1_img, fartman_running_right_2_img, fartman_running_right_3_img])
  127.     fartman_imgs.extend([fartman_running_left_1_img, fartman_running_left_2_img, fartman_running_left_3_img])
  128.     class Fartman(pygame.sprite.Sprite):
  129.         def __init__(self):
  130.             pygame.sprite.Sprite.__init__(self)
  131.  
  132.             self.image = pygame.transform.scale(fartman_standing_1_img, (52, 106))
  133.             self.image.set_colorkey(white)
  134.             self.rect = self.image.get_rect()
  135.             self.rect.centerx, self.rect.centery = width / 2, height / 2
  136.             self.area = range(self.rect.left, self.rect.right)
  137.             self.area_y = range(self.rect.top, self.rect.bottom)
  138.  
  139.             self.og_gravity = 1.8
  140.             self.gravity = 1.8
  141.             self.touching_floor = False
  142.             self.jumping = False
  143.             self.jump_cd = pygame.time.get_ticks() # jump cooldown
  144.             self.jump_initial_boost = True
  145.             self.jump_time = 0
  146.             self.jump_time1 = pygame.time.get_ticks()
  147.             self.jump_time2 = pygame.time.get_ticks()
  148.  
  149.             self.hit_cd = pygame.time.get_ticks()
  150.             self.hp = 1 # every 1 hp is an hp grade (i.e. big, fire, whatever the nigger mario does
  151.             self.gravity_reset = False
  152.             self.what_touching = None
  153.             self.gravity_check = False
  154.             self.gravity_counter = 0
  155.  
  156.             self.no_right = False
  157.             self.no_left = False
  158.             self.no_right_counter = 0
  159.             self.no_left_counter = 0
  160.             self.direction = None
  161.             self.level = 1
  162.             self.enter_portapotty = False
  163.             self.level_end = False
  164.  
  165.             self.level_1_load = True
  166.             self.level_2_load = False
  167.  
  168.             self.coords = (self.rect.x, self.rect.y)
  169.             self.running_right_counter = 0
  170.             self.running_left_counter = 0
  171.             self.override_no_right = False
  172.             self.override_no_left = False
  173.             self.load = False
  174.            
  175.             self.powerup = 'None' # 'None' by default
  176.             self.dead = False
  177.             self.poop_throw_cd = pygame.time.get_ticks()
  178.             self.level_1_end = False
  179.             self.platform_make_powerup_cd = pygame.time.get_ticks()
  180.             self.platforms = []
  181.             self.scroll_speed = 5
  182.             self.fast_cd = pygame.time.get_ticks()
  183.  
  184.             self.rotating_orbs_cd = True
  185.             self.fuckingkms = pygame.sprite.Sprite()
  186.             self.fuckingkms.image = pygame.Surface((1,1,))
  187.             self.fuckingkms.rect = self.fuckingkms.image.get_rect()
  188.             self.fuckingkms.rect.x = 0
  189.  
  190.             self.break_box_cd = pygame.time.get_ticks()
  191.             self.break_box_cd2 = pygame.time.get_ticks()
  192.             self.touching_box = False
  193.             self.score = 0
  194.             self.lives = 3
  195.             self.ogx, self.ogy = self.rect.x, self.rect.y
  196.             self.dont_scroll = False
  197.             self.left_side_block = []
  198.            
  199.             self.invisible_detection = pygame.sprite.Sprite()
  200.             self.invisible_detection.image = pygame.Surface((self.rect.width - 12, 5))
  201.             self.invisible_detection.image.fill(red)
  202.             self.invisible_detection.image.set_colorkey(white)
  203.             self.invisible_detection.rect = self.invisible_detection.image.get_rect()
  204.             self.invisible_detection.rect.centerx, self.invisible_detection.top = self.rect.centerx, self.rect.top - 1
  205.  
  206.             self.editing_mode = False
  207.             self.edit_ground_cd = pygame.time.get_ticks()
  208.             self.edit_box_cd = pygame.time.get_ticks()
  209.             self.edit_assignment_list = []
  210.             self.edit_sprite_assignment_list = []
  211.             self.edit_compile_timer = pygame.time.get_ticks()
  212.            
  213.             self.edit_box_loot_cd = pygame.time.get_ticks()
  214.             self.edit_Poopyhead_cd = pygame.time.get_ticks()
  215.             self.edit_PoopyBird_cd = pygame.time.get_ticks()
  216.             self.edit_Popout_Sword_cd = pygame.time.get_ticks()
  217.             self.editTF = True
  218.             self.edit_cannon_cd = pygame.time.get_ticks()
  219.            
  220.             self.edit_level = 1
  221.             self.remove_for_edit = False
  222.             self.edit_portapotty_cd = pygame.time.get_ticks()
  223.             self.edit1 = True
  224.             self.edit_load = False
  225.  
  226.             for i in range(0,1):
  227.                 i = pygame.sprite.Sprite()
  228.                 i.image = pygame.Surface((5, 1200))
  229.                 i.image.fill(white)
  230.                 i.image.set_colorkey(white)
  231.                 i.rect = i.image.get_rect()
  232.                 i.rect.right, i.rect.bottom = 1, height
  233.                 self.left_side_block.append(i)
  234.  
  235.         def touching(self):
  236.             try:
  237.                 for floor in floors:
  238.                     if floor.no_left:
  239.                         self.no_left = True
  240.                     elif floor.no_right:
  241.                         self.no_right = True
  242.             except:
  243.                 pass
  244.            
  245.             height = self.rect.bottom - self.rect.y
  246.             width = self.rect.right - self.rect.x
  247.             self.break_box_cd2 = pygame.time.get_ticks()
  248.             if self.touching_floor:
  249.                 self.jump_time = 0
  250.            
  251.             self.invisible_detection.image = pygame.Surface((self.rect.width - 24, 1))
  252.             self.invisible_detection.image.fill(white)
  253.             self.invisible_detection.image.set_colorkey(white)
  254.             self.invisible_detection.rect.x, self.invisible_detection.top = self.rect.x + 60, self.rect.top - 1
  255.             for floor in floors:
  256.                 if floor.legit:
  257.                     if self.rect.right in range(floor.rect.left, floor.rect.right) or self.rect.left in range(floor.rect.left, floor.rect.right):
  258.                         if self.rect.bottom in range(floor.rect.y - 2, floor.rect.y + 30):
  259.                             self.touching_floor = True
  260.                             self.jumping = False
  261.                             self.jump_initial_boost = True
  262.                             self.what_touching = floor.rect.top
  263.                             self.rect.bottom = self.what_touching
  264.                             self.jump_time = 0
  265.                             self.gravity = 1.8
  266.                             try:
  267.                                 floor.onTop = True
  268.                             except:
  269.                                 pass
  270.                             self.gravity_reset = True
  271.                         else:
  272.                             self.gravity_reset = False
  273.                             self.toucing_floor = False
  274.                             try:
  275.                                 floor.onTop = False
  276.                             except:
  277.                                 pass
  278.  
  279.         def movement(self): # Add velocity later? i.e. to turn from one direction to the other it takes longer? (it slides)
  280.             keyState = pygame.key.get_pressed()
  281.             self.jump_time = self.jump_time2 - self.jump_time1
  282.             new_jump_cd = pygame.time.get_ticks()
  283.             upwards = 6.5
  284.             self.area = range(self.rect.left, self.rect.right)
  285.            
  286.             self.cords = (self.rect.x, self.rect.y)
  287.             self.area_y = range(self.rect.top, self.rect.bottom)
  288.             scroll = True
  289.             self.invisible_detection.rect.x, self.invisible_detection.rect.x = self.rect.x, self.rect.y - 5
  290.  
  291.             for sprite in self.left_side_block:
  292.                 if self.rect.colliderect(sprite.rect):
  293.                     self.no_left = True
  294.            
  295.             for sprite in floors:
  296.                 if floors.index(sprite) == 0:
  297.                     if sprite.rect.left in range(-5,5):
  298.                         self.dont_scroll = True
  299.                         self.rect.x - 1
  300.                     else:
  301.                         self.dont_scroll = False
  302.  
  303.             if self.rect.x >= width/2:
  304.                 self.dont_scroll = False
  305.  
  306.             if len(box_sprites) <= 1:
  307.                 self.touching_box = False
  308.  
  309.             if keyState[pygame.K_p]:
  310.                 self.editing_mode = True
  311.  
  312.             if self.override_no_right:
  313.                 self.no_right = True
  314.             if self.override_no_left:
  315.                 self.no_left = True
  316.             if keyState[pygame.K_d]:
  317.                 if not self.no_right:
  318.                     if not self.dont_scroll:
  319.                         self.fuckingkms.rect.x -= self.scroll_speed
  320.                         for sprite in scroll_sprites:
  321.                             sprite.rect.x -= self.scroll_speed
  322.                         for sprite in loopable_bgs:
  323.                             sprite.rect.x -= 1
  324.                     else:
  325.                         self.rect.x += 5
  326.                     self.direction = 'right'
  327.                     if self.running_right_counter <= 11:
  328.                         self.image =  fartman_running_right_1_img
  329.                         self.image.set_colorkey(white)
  330.                         self.running_right_counter += 1
  331.                     elif self.running_right_counter <= 22:
  332.                         self.image =  fartman_running_right_2_img
  333.                         self.image.set_colorkey(white)
  334.                         self.running_right_counter += 1
  335.                     elif self.running_right_counter <= 33:
  336.                         self.image =  fartman_running_right_3_img
  337.                         self.image.set_colorkey(white)
  338.                         self.running_right_counter += 1
  339.                     elif self.running_right_counter <= 44:
  340.                         self.image =  fartman_running_right_4_img
  341.                         self.image.set_colorkey(white)
  342.                         self.running_right_counter += 1
  343.                     elif self.running_right_counter <= 55:
  344.                         self.image = fartman_running_right_5_img
  345.                         self.running_right_counter += 1
  346.                     elif self.running_right_counter <= 66:
  347.                         self.image = fartman_running_right_6_img
  348.                         self.running_right_counter += 1
  349.                     elif self.running_right_counter <= 77:
  350.                         self.image = fartman_running_right_7_img
  351.                         self.running_right_counter += 1
  352.                     elif self.running_right_counter <= 88:
  353.                         self.image = fartman_running_right_8_img
  354.                         self.running_right_counter += 1
  355.                     elif self.running_right_counter <= 99:
  356.                         self.running_right_counter = 0
  357.  
  358.             self.image.set_colorkey(white)
  359.             if keyState[pygame.K_a]:
  360.                 if not self.no_left:
  361.                     if not self.dont_scroll:
  362.                         self.fuckingkms.rect.x += self.scroll_speed
  363.                         for sprite in scroll_sprites:
  364.                             sprite.rect.x += self.scroll_speed
  365.                         for sprite in loopable_bgs:
  366.                             sprite.rect.x += 1
  367.                     else:
  368.                         self.rect.x -= 5
  369.                     self.direction = 'left'
  370.                     if self.running_left_counter <= 11:
  371.                         self.image =  fartman_running_left_1_img
  372.                         self.image.set_colorkey(white)
  373.                         self.running_left_counter += 1
  374.                     elif self.running_left_counter <= 22:
  375.                         self.image =  fartman_running_left_2_img
  376.                         self.image.set_colorkey(white)
  377.                         self.running_left_counter += 1
  378.                     elif self.running_left_counter <= 33:
  379.                         self.image =  fartman_running_left_3_img
  380.                         self.image.set_colorkey(white)
  381.                         self.running_left_counter += 1
  382.                     elif self.running_left_counter <= 44:
  383.                         self.image =  fartman_running_left_4_img
  384.                         self.image.set_colorkey(white)
  385.                         self.running_left_counter += 1
  386.                     elif self.running_left_counter <= 55:
  387.                         self.image = fartman_running_left_5_img
  388.                         self.running_left_counter += 1
  389.                     elif self.running_left_counter <= 66:
  390.                         self.image = fartman_running_left_6_img
  391.                         self.running_left_counter += 1
  392.                     elif self.running_left_counter <= 77:
  393.                         self.image = fartman_running_left_7_img
  394.                         self.running_left_counter += 1
  395.                     elif self.running_left_counter <= 88:
  396.                         self.image = fartman_running_left_8_img
  397.                         self.running_left_counter += 1
  398.                     elif self.running_left_counter <= 99:
  399.                         self.running_left_counter = 0
  400.                     self.image.set_colorkey(white)
  401.                        
  402.             if keyState[pygame.K_SPACE]:
  403.                 if self.touching_floor or self.touching_box:
  404.                     if new_jump_cd - self.jump_cd >= 500:
  405.                         if not self.jumping:
  406.                             self.gravity = self.og_gravity
  407.                             self.jump_cd = new_jump_cd
  408.                             self.jumping = True
  409.                             self.jump_time1 = pygame.time.get_ticks()
  410.                             jump_time = pygame.time.get_ticks()
  411.                            
  412.             if self.jumping:
  413.                 self.jump_time2 = pygame.time.get_ticks() # Holy fuck this is so spaghetti kill me
  414.                 self.touching_floor = False
  415.                 if self.jump_initial_boost:
  416.                     self.rect.bottom -= 8
  417.                 self.jump_initial_boost = False
  418.                 self.rect.y -= upwards
  419.                 if self.touching_box:
  420.                     if len(box_sprites) <= 1:
  421.                         self.rect.y += self.gravity
  422.             if not self.jumping:
  423.                 self.jump_time = 0
  424.              
  425.             for box in box_sprites:
  426.                 if not self.rect.right in range(box.rect.left, box.rect.right+5) or not self.rect.left in range(box.rect.left, box.rect.right+5) and not self.rect.bottom in range(box.rect.y - 2, box.rect.y + 2):
  427.                     if self.rect.colliderect(box.rect):
  428.                         self.break_box_cd = pygame.time.get_ticks()
  429.                         if self.direction == 'right':
  430.                             self.no_right = True
  431.                             self.no_right_counter = 0
  432.                             self.no_left = False
  433.                         elif self.direction == 'left':
  434.                             self.no_left = True
  435.                             self.no_left_counter = 0
  436.                             self.no_right = False
  437.                     else:
  438.                         self.no_right_counter += 1
  439.                         self.no_left_counter += 1
  440.                         if self.no_right_counter >= len(box_sprites):
  441.                             self.no_right = False
  442.                         if self.no_left_counter >= len(box_sprites):
  443.                             self.no_left = False
  444.                     if self.gravity_counter >= len(box_sprites):
  445.                         self.touching_floor = False
  446.                         self.gravity_reset = False
  447.                         if self.gravity < self.og_gravity:
  448.                             self.gravity = 1.8
  449.                            
  450.                 if self.rect.right in range(box.rect.left, box.rect.right+5) or self.rect.left in range(box.rect.left, box.rect.right+5):
  451.                     if self.rect.bottom in range(box.rect.y - 2, box.rect.y + 10):
  452.                         self.touching_floor = True
  453.                         self.jumping = False
  454.                         self.touching_box = True
  455.                         self.what_touching = box.rect.top
  456.                         self.rect.bottom = self.what_touching
  457.                         self.gravity_check = True
  458.                         self.gravity = 0
  459.                         self.jump_time = 0
  460.                         self.gravity_reset = True
  461.                         self.og_gravity = 0
  462.                         self.gravity_counter = 0
  463.                         if len(box_sprites) <= 1:
  464.                             self.gravity = 1.8
  465.                     else:
  466.                         if self.gravity_counter >= len(box_sprites):
  467.                             self.touching_floor = False
  468.                             self.gravity_reset = False
  469.                             if self.gravity < self.og_gravity:
  470.                                 self.gravity = 1.8
  471.                 else:
  472.                     if self.gravity_counter >= len(box_sprites):
  473.                         if self.gravity <= self.og_gravity:
  474.                             if self.gravity_counter >= len(box_sprites):
  475.                                 self.gravity = 1.8
  476.                    
  477.                     self.gravity_reset = False
  478.                     self.touching_floor = False # Honestly can't believe how spaghetti it is lmfao
  479.                     self.gravity_counter += 1
  480.  
  481.                 for i in self.area:
  482.                     if i in range(box.rect.left-5, box.rect.right+5):
  483.                         if self.rect.bottom in range(box.rect.y - 2, box.rect.y + 2):
  484.                             self.touching_floor = True
  485.                             self.jumping = False
  486.                             self.what_touching = box.rect.top
  487.                             self.gravity_reset = True
  488.                             self.og_gravity = 0
  489.                         else:
  490.                             if self.gravity_counter >= len(box_sprites):
  491.                                 self.touching_floor = False
  492.                                 self.gravity_reset = False
  493.                     else:
  494.                         if self.gravity_counter >= len(box_sprites):
  495.                             self.gravity_reset = False
  496.                             self.touching_floor = False
  497.  
  498.             if self.gravity_reset:
  499.                 self.rect.bottom = self.what_touching
  500.                 self.touching_floor = True
  501.                 self.jump_initial_boost = True
  502.                 self.jump_time = 0
  503.                 self.gravity = 1.8
  504.  
  505.             try:
  506.                 for floor in floors:
  507.                     if floor.no_left:
  508.                         self.no_left = True
  509.                     elif floor.no_right:
  510.                         self.no_right = True
  511.             except:
  512.                 pass
  513.          
  514.         def stomping_enemies(self):
  515.             height = self.rect.bottom - self.rect.y
  516.             width = self.rect.right - self.rect.x
  517.             damage_cd = pygame.time.get_ticks()
  518.             if self.hp <= 0:
  519.                 self.dead = True
  520.             if self.dead:
  521.                 self.lives -= 1
  522.                 self.hp = 1
  523.                 self.rect.x, self.rect.y = self.ogx, self.ogy
  524.                 for sprite in scroll_sprites:
  525.                     sprite.reset = True
  526.                 for sprite in portapotty_sprites:
  527.                     sprite.reset = True
  528.                 for sprite in box_sprites:
  529.                     sprite.reset = True
  530.                 self.powerup = 'None'
  531.                 self.dead = False
  532.                  # ADD GAME OVER
  533.            
  534.             try:
  535.                 for enemy in enemy_sprites:
  536.                     if self.rect.bottom in range(enemy.rect.top - 8, enemy.rect.top + 15):
  537.                         if self.rect.left + width in range(enemy.rect.left -3, enemy.rect.right +3) or self.rect.right - width in range(enemy.rect.left-3, enemy.rect.right+3):
  538.                             if self.jump_time >= 300 and enemy.killable:
  539.                                 print('Killed enemy sprite.')
  540.                                 enemy.alive = False
  541.                                 enemy.kill()
  542.                                 enemy_sprites.remove(enemy)
  543.                                 self.score += 100
  544.                                 self.gravity = 5.2
  545.                         for i in self.area:
  546.                             if i in range(enemy.rect.left-3, enemy.rect.right+3):
  547.                                 if self.jump_time >= 300:
  548.                                     enemy.alive = False
  549.                                     enemy.kill()
  550.                                     enemy_sprites.remove(enemy)
  551.                        
  552.                     if self.rect.bottom > enemy.rect.top:
  553.                         if self.rect.left in range(enemy.rect.left, enemy.rect.right) or self.rect.right in range(enemy.rect.left, enemy.rect.right):
  554.                             if damage_cd - self.hit_cd >= 1000 and self.rect.colliderect(enemy):
  555.                                 self.hp -= 1
  556.                                 self.hit_cd = damage_cd
  557.                                 print('Hit by enemy sprite')
  558.             except:
  559.                 pass
  560.  
  561.             if self.rect.top >= 1080: # height of screen
  562.                 self.dead = True
  563.  
  564.         def break_boxes(self):
  565.             height = self.rect.bottom - self.rect.y
  566.             width = self.rect.right - self.rect.x
  567.             for box in box_sprites:
  568.                 if self.break_box_cd2 - self.break_box_cd >= 100:
  569.                     if box.type == 'no loot':
  570.                         if self.rect.top in range(box.rect.bottom - 3, box.rect.bottom + 3):
  571.                             if self.rect.left + width in range(box.rect.left -3, box.rect.right +3) or self.rect.right - width in range(box.rect.left-3, box.rect.right+3):
  572.                                 print('scra boom!')
  573.                                 if self.jump_time <= 1000:
  574.                                     print('Empty box hit')
  575.                                     # if size > 1: box break, otherwise box doesn't break
  576.                                     if not box.broken:
  577.                                         box.broken = True
  578.                                     self.jumping = False
  579.                            
  580.                             for i in self.area:
  581.                                 if i in range(box.rect.left -3, box.rect.right +3):
  582.                                     if self.jump_time <= 1000:
  583.                                         if not box.broken:
  584.                                             print('Empty box hit')
  585.                                             box.broken = True
  586.                                         self.jumping = False
  587.                     elif box.type == 'loot':
  588.                         if self.rect.top in range(box.rect.bottom - 4, box.rect.bottom + 2):
  589.                             if self.rect.left + width in range(box.rect.left -3, box.rect.right +3) or self.rect.right - width in range(box.rect.left-3, box.rect.right+3):
  590.                                 if self.jump_time <= 1000:
  591.                                     if not box.broken:
  592.                                         print('Loot box hit')
  593.                                         box.broken = True
  594.                                     self.jumping = False
  595.                                     box.releasing = True
  596.                             for i in self.area:
  597.                                 if i in range(box.rect.left -3, box.rect.right +3):
  598.                                     if self.jump_time <= 1000:
  599.                                         if not box.broken:
  600.                                             print('Loot box hit')
  601.                                             box.broken = True
  602.                                         self.jumping = False
  603.                                         box.releasing = True
  604.  
  605.         def powerups(self):
  606.             mx, my = pygame.mouse.get_pos()
  607.             timer = pygame.time.get_ticks()
  608.             for powerup in powerup_sprites:
  609.                 if self.rect.colliderect(powerup):
  610.                     if powerup.type == 'Big' and self.powerup == 'None':
  611.                         self.hp += 1
  612.                         self.powerup = 'Big'
  613.                         self.score += 1000
  614.                         # CHANGE IMAGE
  615.                         print('Gained powerup: Big')
  616.                         powerup_sprites.remove(powerup)
  617.                         for image in fartman_imgs:
  618.                             width, height = image.get_size()
  619.                             print('doubling')
  620.                             image = pygame.transform.scale(image, (width*2, height*2))
  621.                     elif powerup.type == 'poop' and self.powerup == 'None':
  622.                         self.hp += 2
  623.                         self.powerup = 'poop'
  624.                         self.score += 1000
  625.                         print('Gained powerup: poop')
  626.                         # CHANGE IMAGE i.e. self.poop_images = True. In the animations, make it so that the regular animations are only there
  627.                         # if the poop animations aren't (i.e. if the powerup is not poop) or some other powerup
  628.                     elif powerup.type == 'poop' and self.powerup == 'Big':
  629.                         self.hp += 1
  630.                         print('Gained powerup: poop')
  631.                         self.powerup = 'poop'
  632.                         self.score += 1000
  633.                     elif powerup.type == 'Big' and self.powerup != 'None':
  634.                         self.score += 1000
  635.                         powerup_sprites.remove(powerup)
  636.                         print("Couldn't gain powerup as current powerup exceeds its power")
  637.                     elif powerup.type == 'platform' and self.powerup == 'None':
  638.                         self.hp += 1
  639.                         self.powerup = 'platform'
  640.                         self.score += 1000
  641.                         powerup_sprites.remove(powerup)
  642.                         print('Gained powerup: make platforms')
  643.                     else:
  644.                         self.score += 1000
  645.                         powerup_sprites.remove(powerup)
  646.  
  647.             if self.powerup == 'poop':
  648.                 keyState = pygame.key.get_pressed()
  649.                 if keyState[pygame.K_f] and timer - self.poop_throw_cd >= 500:
  650.                     self.poop_throw_cd = timer
  651.                     for i in range(0,1):
  652.                         i = Poop_Throw_Sprite(self.direction)
  653.                         projectile_sprites.append(i)
  654.                         scroll_sprites.append(i)
  655.  
  656.             elif self.powerup == 'platform':
  657.                 keyState = pygame.key.get_pressed()
  658.                 if keyState[pygame.K_f] and timer - self.platform_make_powerup_cd >= 500:
  659.                     self.platform_make_powerup_cd = timer
  660.                     for i in range(0,1):
  661.                         i = Platform(mx, my)
  662.                         scroll_sprites.append(i)
  663.                         floors.append(i)
  664.                         self.platforms.append(i)
  665.                     if len(self.platforms) >= 3:
  666.                         self.powerup = 'Big'
  667.                        
  668.             elif self.powerup == 'fast':
  669.                 self.scroll_speed = 10
  670.                 if timer - self.fast_cd >= 10000:
  671.                     self.powerup = 'Big'
  672.                     self.fast_cd = timer
  673.                    
  674.             elif self.powerup == 'rotating orbs':
  675.                 if self.rotating_orbs_cd:
  676.                     for i in range(0,1):
  677.                         i = Rotating_Orbs()
  678.                         rotating_orbs_sprites.append(i)
  679.                     self.rotating_orbs_cd = False
  680.  
  681.         def end_level(self):
  682.             if self.enter_portapotty:
  683.                 self.level_end = True # ADD A COUNTER SO IT DOESN'T SKIP LIKE 20 LEVELS
  684.  
  685.             if self.level_end:
  686.                 try:
  687.                     for floor in floors:
  688.                         if floor.level == self.level:
  689.                             floors.remove(floor)
  690.                         try:
  691.                             for i in floor.under_floor_sprites:
  692.                                 floor.under_floor_sprites.remove(i)
  693.                         except:
  694.                             pass
  695.                     for box in box_sprites:
  696.                         if box.level == self.level:
  697.                             box_sprites.remove(box)
  698.                     for enemy in enemy_sprites:
  699.                         if enemy.level == self.level:
  700.                             enemy_sprites.remove(enemy)
  701.                     for sprite in portapotty_sprites:
  702.                         if sprite.level == self.level:
  703.                             portapotty_sprites.remove(sprite)
  704.                     for sprite in gravity_sprites:
  705.                         if sprite != self:
  706.                             gravity_sprites.remove(sprite)
  707.                     for sprite in box_sprites2:
  708.                         box_sprites.remove(sprite)
  709.                     for sprite in no_move_enemy_sprites:
  710.                         no_move_enemy_sprites.remove(sprite)
  711.                     for sprite in scroll_sprites:
  712.                         scroll_sprites.remove(sprite)
  713.                 except:
  714.                     pass
  715.  
  716.                 print(self.level)
  717.                 if self.level + 1 == 2:
  718.                     self.level_1_load = False
  719.                     self.level_2_load = True
  720.                 self.level_end = False
  721.                 self.level += 1
  722.                 self.enter_portapotty = False
  723.                 self.load = True
  724.                 salami = True
  725.  
  726.         def Editing_Mode(self):
  727.             keyState = pygame.key.get_pressed()
  728.             mx, my = pygame.mouse.get_pos()
  729.             timer = pygame.time.get_ticks()
  730.             self.gravity = 0
  731.             self.jumping = False
  732.             self.hp = 1000
  733.             if self.editTF:
  734.                 self.edit_level = int(input('What level is this going to be? '))
  735.                 self.remove_for_edit = input('Would you like to delete all objects on screen to make the level? ')
  736.                 self.editTF = False
  737.             if self.remove_for_edit == 'yes':
  738.                 for floor in floors:
  739.                     if floor.level == self.level:
  740.                         floors.remove(floor)
  741.                     try:
  742.                         for i in floor.under_floor_sprites:
  743.                             floor.under_floor_sprites.remove(i)
  744.                             floors.remove(i)
  745.                     except:
  746.                         pass
  747.                    
  748.                 for box in box_sprites:
  749.                     if box.level == self.level:
  750.                         box_sprites.remove(box)
  751.                 for enemy in enemy_sprites:
  752.                     if enemy.level == self.level:
  753.                         enemy_sprites.remove(enemy)
  754.                 for sprite in portapotty_sprites:
  755.                     portapotty_sprites.remove(sprite)
  756.                 for sprite in scroll_sprites:
  757.                     scroll_sprites.remove(sprite)
  758.                 for sprite in gravity_sprites:
  759.                     gravity_sprites.remove(sprite)
  760.                 for sprite in box_sprites2:
  761.                     box_sprites2.remove(sprite)
  762.                 for sprite in no_move_enemy_sprites:
  763.                     no_move_enemy_sprites.remove(sprite)
  764.                 self.remove_for_edit = 'kys'
  765.  
  766.             if self.edit_level == 1:
  767.                 if self.edit1:
  768.                     if not os.stat('level_1.txt').st_size == 0:
  769.                         continue_ = input('That level already has some edits. Would you like to make more, or delete the level and start anew? (more/delete)')
  770.                         if continue_ == 'more':
  771.                             self.edit_level_one = True
  772.                             self.level_1_load = True
  773.                             self.load = True
  774.                             self.edit_load=True
  775.                             salami = True
  776.                            
  777.                     self.edit1 = False
  778.             elif self.edit_level == 2:
  779.                 if self.edit2:
  780.                     if not os.stat('level_2.txt').st_size == 0:
  781.                         continue_ = input('Thta level already has some edits. Would you like to make more, or delete the level and start anew? (more/delete')
  782.                         if continue_ == 'more':
  783.                             self.edit_level_two = True
  784.                             self.level_2_load = True
  785.                             self.load = True
  786.                             self.edit_load = True
  787.                             salami = True
  788.                
  789.             if keyState[pygame.K_w] or keyState[pygame.K_SPACE]:
  790.                 self.rect.y -= 5
  791.             elif keyState[pygame.K_s]:
  792.                 self.rect.y += 5
  793.                
  794.             if keyState[pygame.K_g]:
  795.                 if timer - self.edit_ground_cd >= 500:
  796.                     # change here to fuck with the levels for the editor
  797.                     a = 'G '+str(mx-self.fuckingkms.rect.x) +' '+str(my)+' '+str(self.edit_level)+' floors'
  798.                     b = Ground(mx, my, self.edit_level, floors)
  799.                     print(a)
  800.                     self.edit_ground_cd = timer
  801.                     self.edit_assignment_list.append(a)
  802.                     scroll_sprites.append(b)
  803.                     floors.append(b)
  804.                     self.edit_sprite_assignment_list.append(b)
  805.  
  806.             if keyState[pygame.K_b]:
  807.                 if timer - self.edit_box_cd >= 1000:
  808.                     a = 'B '+str(mx - self.fuckingkms.rect.x)+' '+str(my)+' no loot ' +str(self.edit_level)
  809.                     b = Box(mx, my, 'no loot', self.edit_level)
  810.                     print(a)
  811.                     self.edit_box_cd = timer
  812.                     self.edit_assignment_list.append(a)
  813.                     scroll_sprites.append(b)
  814.                     box_sprites.add(b)
  815.                     self.edit_sprite_assignment_list.append(b)
  816.                     print(box_sprites)
  817.        
  818.             if keyState[pygame.K_v]:
  819.                 if timer - self.edit_box_loot_cd >= 1000:
  820.                     a = 'B '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' loot '+str(self.edit_level)
  821.                     b = Box(mx, my, 'loot', self.edit_level)
  822.                     print(a)
  823.                     self.edit_box_loot_cd = timer
  824.                     self.edit_assignment_list.append(a)
  825.                     scroll_sprites.append(b)
  826.                     self.edit_sprite_assignment_list.append(b)
  827.                     box_sprites.add(b)
  828.  
  829.             if keyState[pygame.K_e]:
  830.                 if timer - self.edit_Poopyhead_cd >= 1000:
  831.                     a = 'P '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' '+str(self.edit_level)
  832.                     b = Poopyhead(mx, my, self.edit_level)
  833.                     b.touching_floor = False
  834.                     self.edit_Poopyhead_cd = timer
  835.                     self.edit_assignment_list.append(a)
  836.                     scroll_sprites.append(b)
  837.                     self.edit_sprite_assignment_list.append(b)
  838.                     enemy_sprites.append(b)
  839.                     gravity_sprites.append(b)
  840.  
  841.             if keyState[pygame.K_l]:
  842.                 if timer - self.edit_PoopyBird_cd >= 1000: # L is for poopy bird
  843.                     a = 'L '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' '+str(self.edit_level)
  844.                     b = Poopy_Bird(mx,my, self.edit_level)
  845.                     self.edit_PoopyBird_cd = timer
  846.                     self.edit_assignment_list.append(a)
  847.                     scroll_sprites.append(b)
  848.                     self.edit_sprite_assignment_list.append(b)
  849.                     enemy_sprites.append(b)
  850.  
  851.             if keyState[pygame.K_1]:
  852.                 if timer - self.edit_Popout_Sword_cd >= 1000:
  853.                     a = '1 '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' left '+str(self.edit_level)
  854.                     b = Popout_Sword(mx, my, 'left', self.edit_level)
  855.                     self.edit_Popout_Sword_cd = timer
  856.                     self.edit_assignment_list.append(a)
  857.                     enemy_sprites.append(b)
  858.                     scroll_sprites.append(b)
  859.                     self.edit_sprite_assignment_list.append(b)
  860.                     floors.append(b.b)
  861.                     scroll_sprites.append(b.b)
  862.                     self.edit_assignment_list.append(b.b)
  863.                     self.edit_sprite_assignment_list.append(b.b)
  864.                    
  865.             if keyState[pygame.K_2]:
  866.                 if timer - self.edit_Popout_Sword_cd >= 1000:
  867.                     a = '1 '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' right '+str(self.edit_level)
  868.                     b = Popout_Sword(mx, my, 'right', self.edit_level)
  869.                     self.edit_Popout_Sword_cd = timer
  870.                     self.edit_assignment_list.append(a)
  871.                     enemy_sprites.append(b)
  872.                     scroll_sprites.append(b)
  873.                     self.edit_sprite_assignment_list.append(b)
  874.                     floors.append(b.b)
  875.                     scroll_sprites.append(b.b)
  876.                     self.edit_assignment_list.append(b.b)
  877.                     self.edit_sprite_assignment_list.append(b.b)
  878.  
  879.                     floors, enemy_sprites, scroll_sprites
  880.  
  881.             if keyState[pygame.K_3]:
  882.                 if timer - self.edit_Popout_Sword_cd >= 1000:
  883.                     a = '1 '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' up '+str(self.edit_level)
  884.                     b = Popout_Sword(mx, my, 'up', self.edit_level)
  885.                     self.edit_Popout_Sword_cd = timer
  886.                     self.edit_assignment_list.append(a)
  887.                     enemy_sprites.append(b)
  888.                     scroll_sprites.append(b)
  889.                     self.edit_sprite_assignment_list.append(b)
  890.                     floors.append(b.b)
  891.                     scroll_sprites.append(b.b)
  892.                     self.edit_assignment_list.append(b.b)
  893.                     self.edit_sprite_assignment_list.append(b.b)
  894.  
  895.             if keyState[pygame.K_4]:
  896.                 if timer - self.edit_Popout_Sword_cd >= 1000:
  897.                     a = '1 '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' down '+str(self.edit_level)
  898.                     b = Popout_Sword(mx, my, 'down',self.edit_level)
  899.                     self.edit_Popout_Sword_cd = timer
  900.                     self.edit_assignment_list.append(a)
  901.                     enemy_sprites.append(b)
  902.                     scroll_sprites.append(b)
  903.                     self.edit_sprite_assignment_list.append(b)
  904.                     floors.append(b.b)
  905.                     scroll_sprites.append(b.b)
  906.                     self.edit_assignment_list.append(b.b)
  907.                     self.edit_sprite_assignment_list.append(b.b)
  908.  
  909.             if keyState[pygame.K_o]:
  910.                 if timer - self.edit_portapotty_cd >= 1000:
  911.                     a = 'O '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' True '+str(self.edit_level) # if aspect[3] == 'True'
  912.                     b = Portapotty(mx, my, True, self.edit_level)
  913.                     self.edit_assignment_list.append(a)
  914.                     scroll_sprites.append(b)
  915.                     portapotty_sprites.append(b)
  916.                     self.edit_sprite_assignment_list.append(b)
  917.                     self.edit_portapotty_cd = timer
  918.  
  919.             if keyState[pygame.K_m]:
  920.                 if timer - self.edit_cannon_cd >= 1000:
  921.                     self.edit_cannon_cd = timer
  922.                     a = 'M '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' left '+str(self.edit_level)
  923.                     b = Cannon(mx, my, 'left', self.edit_level)
  924.                     self.edit_assignment_list.append(a)
  925.                     scroll_sprites.append(b)
  926.                     no_move_enemy_sprites.append(b)
  927.                     self.edit_sprite_assignment_list.append(b)
  928.  
  929.             if keyState[pygame.K_n]:
  930.                 if timer - self.edit_cannon_cd >= 1000:
  931.                     self.edit_cannon_cd = timer
  932.                     a = 'M '+str(mx-self.fuckingkms.rect.x)+' '+str(my)+' right '+str(self.edit_level)
  933.                     b = Cannon(mx, my, 'right', self.edit_level)
  934.                     self.edit_assignment_list.append(a)
  935.                     scroll_sprites.append(b)
  936.                     no_move_enemy_sprites.append(b)
  937.                     self.edit_sprite_assignment_list.append(b)
  938.  
  939.             for sprite in self.edit_sprite_assignment_list:
  940.                 if sprite.rect.collidepoint(mx,my):
  941.                     if right_click:
  942.                         del self.edit_assignment_list[self.edit_sprite_assignment_list.index(sprite)]
  943.                         self.edit_sprite_assignment_list.remove(sprite)
  944.                         if sprite in box_sprites:
  945.                             box_sprites.remove(sprite)
  946.                         elif sprite in enemy_sprites:
  947.                             enemy_sprites.remove(sprite)
  948.                         elif sprite in floors:
  949.                             floors.remove(sprite)
  950.                             try:
  951.                                 for floor in sprite.under_floor_sprites:
  952.                                     floors.remove(floor)
  953.                             except:
  954.                                 pass
  955.                         try:
  956.                             floors.remove(sprite)
  957.                             scroll_sprites.remove(sprite)
  958.                         except:
  959.                             pass
  960.                         scroll_sprites.remove(sprite)
  961.  
  962.             if keyState[pygame.K_c]: # final compile. hit c to start to write to the txt file.
  963.                 if timer - self.edit_compile_timer >= 1000:
  964.                     self.edit_compile_timer = timer
  965.                     if self.edit_level == 1:
  966.                         level_1_file = open('level_1.txt', 'a') # for i in level_1_file: if start of line is g, then i = Ground(). The next number in the line is the sprite's x, etc etc...
  967.                         for sprite in self.edit_assignment_list:
  968.                             level_1_file.write(str(sprite)+'\n')
  969.                     elif self.edit_level == 2:
  970.                         level_2_file = open('level_2.txt', 'a')
  971.                         for sprite in self.edit_assignment_list:
  972.                             level_2_file.write(str(sprite)+'\n')
  973.  
  974.     fartman = Fartman()
  975.     gravity_sprites.append(fartman)
  976.  
  977.     class Cannon_Shot(pygame.sprite.Sprite):
  978.         def __init__(self, posx, posy, direction, level):
  979.             pygame.sprite.Sprite.__init__(self)
  980.             self.image = pygame.Surface((30, 30))
  981.             self.image.fill(yellow)
  982.             self.image.set_colorkey(white)
  983.             self.rect = self.image.get_rect()
  984.             self.rect.x, self.rect.y = posx, posy
  985.  
  986.             self.level = level
  987.             self.gravity = 0
  988.             self.direction = direction
  989.             self.touching_floor = True
  990.  
  991.         def update(self):
  992.             if self.direction == 'left':
  993.                 self.rect.x -= 5
  994.             elif self.direction == 'right':
  995.                 self.rect.x += 5
  996.             if self.rect.x <= fartman.fuckingkms.rect.x:
  997.                 try:
  998.                     enemy_sprites.remove(self)
  999.                     scroll_sprites.remove(self)
  1000.                 except:
  1001.                     pass
  1002.  
  1003.         def high_iq_movement(self):
  1004.             pass
  1005.    
  1006.     class Cannon(pygame.sprite.Sprite):
  1007.         def __init__(self, posx, posy, direction, level):
  1008.             pygame.sprite.Sprite.__init__(self)
  1009.             self.image = pygame.Surface((50, 100))
  1010.             self.image.fill(red)
  1011.             self.image.set_colorkey(white)
  1012.             self.rect = self.image.get_rect()
  1013.             self.rect.x, self.rect.y = posx, posy
  1014.  
  1015.             self.direction = direction
  1016.             self.timer = pygame.time.get_ticks()
  1017.             self.killable = False
  1018.             self.touching_floor = True
  1019.             self.gravity = 0
  1020.             self.posx, self.posy = posx, posy
  1021.             self.level = level
  1022.  
  1023.         def update(self):
  1024.             timer = pygame.time.get_ticks()
  1025.             keyState = pygame.key.get_pressed()
  1026.                
  1027.             if timer - self.timer >= 3000:
  1028.                 self.timer = timer
  1029.                 for i in range(0,1):
  1030.                     i = Cannon_Shot(self.rect.x + 10, self.rect.y + 5, self.direction, self.level)
  1031.                     no_move_enemy_sprites.append(i)
  1032.                     scroll_sprites.append(i)
  1033.  
  1034.         def high_iq_movement(self):
  1035.             pass
  1036.  
  1037.     portapotty_img = pygame.transform.scale(pygame.image.load('default_porta_potty.png'), (150, 200))
  1038.     class Portapotty(pygame.sprite.Sprite):
  1039.         def __init__(self, posx, posy, type_, level):
  1040.             pygame.sprite.Sprite.__init__(self)
  1041.             self.image = portapotty_img
  1042.             self.image.set_colorkey(white)
  1043.             self.rect = self.image.get_rect()
  1044.             self.rect.x, self.rect.y = posx, posy
  1045.  
  1046.             self.posx, self.posy = posx, posy
  1047.             self.end = type_
  1048.             self.cd = pygame.time.get_ticks()
  1049.             self.reset = False
  1050.  
  1051.         def update(self):
  1052.             timer = pygame.time.get_ticks()
  1053.             if timer - self.cd >= 2000:
  1054.                 self.cd = timer
  1055.                 if self.end:
  1056.                     if fartman.rect.colliderect(self.rect):
  1057.                         fartman.enter_portapotty = True # +70
  1058.                         portapotty_sprites.remove(self)
  1059.             if self.reset:
  1060.                 self.rect.x, self.rect.y = self.posx, self.posy
  1061.                 self.reset = False
  1062.  
  1063.     class Rotating_Orbs(pygame.sprite.Sprite):
  1064.         def __init__(self):
  1065.             pygame.sprite.Sprite.__init__(self)
  1066.             self.image = pygame.Surface((25, 25))
  1067.             self.image.fill(green)
  1068.             self.image.set_colorkey(white)
  1069.             self.rect = self.image.get_rect()
  1070.             self.rect.x, self.rect.y = fartman.rect.x - 200, fartman.rect.y + 200
  1071.  
  1072.             self.center_x = fartman.rect.centerx
  1073.             self.center_y = fartman.rect.centery + 200
  1074.             self.angle = 50
  1075.             self.radius = 200
  1076.             self.speed = 0.05
  1077.  
  1078.             self.b = pygame.sprite.Sprite()
  1079.             self.b.image = pygame.Surface((25, 25))
  1080.             self.b.image.fill(green)
  1081.             self.b.image.set_colorkey(white)
  1082.             self.b.rect = self.b.image.get_rect()
  1083.             self.b.rect.x, self.b.rect.y = fartman.rect.x - 200, fartman.rect.y - 200
  1084.  
  1085.         def update(self):
  1086.             self.center_x = fartman.rect.centerx
  1087.             self.center_y = fartman.rect.centery
  1088.             self.rect.x = self.radius * math.sin(self.angle) + self.center_x
  1089.             self.rect.y = self.radius * math.cos(self.angle) + self.center_y
  1090.             self.b.rect.x = self.radius * math.sin(self.angle) + self.center_x
  1091.             self.b.rect.y = self.radius * math.cos(self.angle) + self.center_y
  1092.             self.angle += self.speed
  1093.  
  1094.     class Popout_Sword(pygame.sprite.Sprite): # a sword that pops out of a specific block. this block will be easily identifiable so the player can avoid the trap.
  1095.         def __init__(self, posx, posy, side, level): # side = which side of the block it will come out of
  1096.             pygame.sprite.Sprite.__init__(self) # make the box it comes out of really elongated for blitting purposes. blit box over sword.
  1097.  
  1098.             self.b = pygame.sprite.Sprite()
  1099.             self.side = side
  1100.             if side == 'left' or side == 'right':
  1101.                 self.image = pygame.Surface((300, 30))
  1102.                 self.b.image = pygame.Surface((300,40))
  1103.             else:
  1104.                 self.image = pygame.Surface((30, 300)) # for the level editor make two seperate keys for the sideways and the vertical
  1105.                 self.b.image = pygame.Surface((40, 300))
  1106.                
  1107.             self.image.fill(red)
  1108.             self.image.set_colorkey(white)
  1109.             self.rect = self.image.get_rect()
  1110.             try:
  1111.                 self.rect.x, self.rect.y = posx, posy
  1112.             except:
  1113.                 pass
  1114.            
  1115.             self.killable = False
  1116.             self.ogx, self.ogy = posx, posy
  1117.             self.is_popout_sword = True
  1118.             self.timer2 = pygame.time.get_ticks()
  1119.             self.level = level
  1120.             self.gravity = 0
  1121.             self.popout = True
  1122.             self.ogx, self.ogy = posx, posy
  1123.  
  1124.             self.b.image.fill(cyan)
  1125.             self.b.image.set_colorkey(white)
  1126.             self.b.rect = self.b.image.get_rect()
  1127.             if self.side == 'right' or self.side == 'left':
  1128.                 self.b.rect.x, self.b.rect.y = posx, posy - 5
  1129.                 self.b.ogx, self.b.ogy = posx, posy - 5
  1130.             else:
  1131.                 self.b.rect.x, self.b.rect.y = posx - 5, posy
  1132.                 self.b.ogx, self.b.ogy = posx - 5, posy
  1133.             self.b.legit = True
  1134.             self.reset = False
  1135.             self.b.is_popout_sword = True
  1136.             self.b.level = level
  1137.  
  1138.             self.killable = False
  1139.             self.timer = pygame.time.get_ticks()
  1140.             self.poke = True
  1141.             self.retract = False
  1142.             self.gravity = 0
  1143.             self.touching_floor = True
  1144.             self.no_left = False
  1145.             self.no_right = False
  1146.             self.changed = 0
  1147.  
  1148.         def update(self):
  1149.             timer = pygame.time.get_ticks()
  1150.             self.touching_floor = True
  1151.  
  1152.             if self.side == 'left':
  1153.                 if self.poke:
  1154.                     if self.rect.x >= self.b.rect.x - 295:
  1155.                         self.rect.x -= 5
  1156.                     else:
  1157.                         self.poke = False
  1158.                 else:
  1159.                     if self.rect.x <= self.b.rect.x - 5:
  1160.                         self.rect.x += 5
  1161.                     else:
  1162.                         self.poke = True
  1163.             elif self.side == 'right':
  1164.                 if self.poke:
  1165.                     if self.rect.right <= self.b.rect.right + 295:
  1166.                         self.rect.x += 5
  1167.                     else:
  1168.                         self.poke = False
  1169.                 else:
  1170.                     if self.rect.right >= self.b.rect.right + 5:
  1171.                         self.rect.x -= 5
  1172.                     else:
  1173.                         self.poke = True
  1174.             elif self.side == 'up':
  1175.                 if self.poke:
  1176.                     if self.rect.y >= self.b.rect.y - 295:
  1177.                         self.rect.y -= 5
  1178.                     else:
  1179.                         self.poke = False
  1180.                 else:
  1181.                     if self.rect.y <= self.b.rect.y - 5:
  1182.                         self.rect.y += 5
  1183.                     else:
  1184.                         self.poke = True
  1185.             elif self.side == 'down':
  1186.                 if self.poke:
  1187.                     if self.rect.bottom <= self.b.rect.bottom + 295:
  1188.                         self.rect.y += 5
  1189.                     else:
  1190.                         self.poke = False
  1191.                 else:
  1192.                     if self.rect.bottom >= self.b.rect.bottom + 5:
  1193.                         self.rect.y -= 5
  1194.                     else:
  1195.                         self.poke = True
  1196.                
  1197.             if self.reset:
  1198.                 self.b.rect.x, self.b.rect.y = self.b.ogx, self.b.ogy
  1199.                 self.rect.x, self.rect.y = self.ogx, self.ogy
  1200.                 self.reset = False
  1201.  
  1202.             if fartman.rect.top in range(self.rect.top + 10, self.rect.bottom) or fartman.rect.bottom in range(self.rect.top + 10, self.rect.bottom) or fartman.rect.centery in range(self.rect.top + 10, self.rect.bottom):
  1203.                 if fartman.rect.left in range(self.rect.left, self.rect.right) or fartman.rect.right in range(self.rect.left, self.rect.right):
  1204.                     if fartman.direction == 'left':
  1205.                         fartman.no_left = True
  1206.                         self.no_left = True
  1207.                         fartman.jump_time = 0
  1208.                      #   fartman.no_right = False
  1209.                     elif fartman.direction == 'right':
  1210.                         fartman.no_right = True
  1211.                         fartman.jump_time = 0
  1212.                         self.no_right = True
  1213.                     #    fartman.no_left = False
  1214.                 else:
  1215.                     self.no_right = False
  1216.                     self.no_left = False
  1217.             else:
  1218.                 self.no_right = False
  1219.                 self.no_left = False
  1220.             self.touching_floor = True
  1221.  
  1222.         def high_iq_movement(self):
  1223.             self.touching_floor = True
  1224.  
  1225.     class Platform(pygame.sprite.Sprite):
  1226.         def __init__(self, posx, posy):
  1227.             pygame.sprite.Sprite.__init__(self)
  1228.             self.image = pygame.Surface((300, 15))
  1229.             self.image.fill(green)
  1230.             self.rect = self.image.get_rect()
  1231.             self.rect.centerx, self.rect.centery = posx, posy
  1232.             self.legit = True
  1233.  
  1234.             self.left_counter = 0
  1235.             self.right_counter = 0
  1236.             self.onTop = False
  1237.             self.decay = pygame.time.get_ticks()
  1238.             self.no_left = False
  1239.             self.no_right = False
  1240.  
  1241.             self.invisible_detection = pygame.sprite.Sprite()
  1242.             self.invisible_detection.image = pygame.Surface((300, 12))
  1243.             self.invisible_detection.image.fill(white)
  1244.             self.invisible_detection.image.set_colorkey(white)
  1245.             self.invisible_detection.rect = self.invisible_detection.image.get_rect()
  1246.             self.invisible_detection.rect.centerx, self.invisible_detection.rect.bottom = posx, self.rect.bottom
  1247.             self.no_up = False
  1248.             self.posx, self.posy = posx, posy
  1249.  
  1250.             self.invisible_detection2 = pygame.sprite.Sprite()
  1251.             self.invisible_detection2.image = pygame.Surface((4, 13))
  1252.             self.invisible_detection2.image.fill(white)
  1253.             self.invisible_detection2.image.set_colorkey(white)
  1254.             self.invisible_detection2.rect = self.invisible_detection2.image.get_rect()
  1255.             self.invisible_detection2.rect.left, self.invisible_detection2.rect.top = self.rect.left - 1, self.rect.top + 1
  1256.  
  1257.             self.invisible_detection3 = pygame.sprite.Sprite()
  1258.             self.invisible_detection3.image = pygame.Surface((4, 13))
  1259.             self.invisible_detection3.image.fill(white)
  1260.             self.invisible_detection3.image.set_colorkey(white)
  1261.             self.invisible_detection3.rect = self.invisible_detection3.image.get_rect()
  1262.             self.invisible_detection3.rect.right, self.invisible_detection3.rect.top = self.rect.right + 1, self.rect.top + 1
  1263.  
  1264.         def update(self):
  1265.             timer = pygame.time.get_ticks()
  1266.             if timer - self.decay >= 15000:
  1267.                 fartman.platforms.remove(self)
  1268.                 scroll_sprites.remove(self)
  1269.                 floors.remove(self)
  1270.  
  1271.             fartman.invisible_detection.rect.centerx, fartman.invisible_detection.top = fartman.rect.centerx, fartman.rect.top - 1
  1272.             self.invisible_detection.rect.centerx, self.invisible_detection.rect.bottom = self.posx, self.rect.bottom + 1
  1273.             if fartman.rect.top in range(self.rect.bottom - 3, self.rect.bottom + 3):
  1274.                 if fartman.rect.left in range(self.rect.left, self.rect.right) or fartman.rect.right in range(self.rect.left, self.rect.right):
  1275.                     fartman_jumping = False
  1276.                     self.no_up = True
  1277.                     print('no detection needed')
  1278.                 else:
  1279.                     self.no_up = False
  1280.             else:
  1281.                 self.no_up = False
  1282.             if fartman.rect.colliderect(self.invisible_detection2.rect):
  1283.                 print('collsiion with left side of platform')
  1284.                 self.no_right = True
  1285.                 fartman.no_right = True
  1286.                 self.right_counter = 0
  1287.             else:
  1288.                 self.right_counter = 1
  1289.                 fartman.no_right = False
  1290.             if fartman.rect.colliderect(self.invisible_detection3.rect):
  1291.                 print('collision with right side of platform')
  1292.                 fartman.no_left = True
  1293.                 self.no_left = True
  1294.                 self.left_counter = 0
  1295.             else:
  1296.                 self.left_counter = 1
  1297.                 fartman.no_left = False
  1298.  
  1299.             if self.no_up:
  1300.                 print('sc')
  1301.                 fartman.jumping = False
  1302.    
  1303.     class Poop_Throw_Sprite(pygame.sprite.Sprite):
  1304.         def __init__(self, direction):
  1305.             pygame.sprite.Sprite.__init__(self)
  1306.  
  1307.             self.image = pygame.Surface((6, 6))
  1308.             self.image.fill(yellow)
  1309.             self.rect = self.image.get_rect()
  1310.             self.direction = direction
  1311.             self.rate = 3
  1312.             if direction == 'right':
  1313.                 self.rect.centerx, self.rect.centery = fartman.rect.right + 3, fartman.rect.bottom - 30
  1314.             elif direction == 'left':
  1315.                 self.rect.centerx, self.rect.centery = fartman.rect.left - 3, fartman.rect.bottom - 30
  1316.  
  1317.         def update(self):
  1318.             if self.direction == 'right':
  1319.                 for floor in floors:
  1320.                     if self.rect.colliderect(floor):
  1321.                         self.rate = 3
  1322.                 for box in box_sprites:
  1323.                     if not self.rect.right in range(box.rect.left, box.rect.right) and not self.rect.top in range(box.rect.top, box.rect.bottom) or not self.rect.bottom in range(box.rect.top, box.rect.bottom):
  1324.                         if self.rect.colliderect(box):
  1325.                             self.rate = 3
  1326.                     else:
  1327.                         if not self.rect.right in range(box.rect.left, box.rect.right+5) or not self.rect.left in range(box.rect.left, box.rect.right+5) and not self.rect.bottom in range(box.rect.y - 2, box.rect.y + 2):
  1328.                             try:
  1329.                                 projectile_sprites.remove(self)
  1330.                             except:
  1331.                                 pass
  1332.                         else:
  1333.                             if self.rect.colliderect(box):
  1334.                                 self.rate = 3
  1335.  
  1336.                 self.rect.x += 6
  1337.                 self.rect.y -= self.rate
  1338.                 self.rate -= 0.2
  1339.             elif self.direction == 'left': # make it so that if it hits the side of a floor/box it explodes
  1340.                 for floor in floors:
  1341.                     if self.rect.colliderect(floor):
  1342.                         self.rate = 3
  1343.                 for box in box_sprites:
  1344.                     if self.rect.colliderect(box):
  1345.                         self.rate = 3
  1346.  
  1347.                 self.rect.x -= 6
  1348.                 self.rect.y -= self.rate
  1349.                 self.rate -= 0.2
  1350.  
  1351.     Poopyhead_running_left_1_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_1.png').convert(), (42, 50))
  1352.     Poopyhead_running_left_2_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_2.png').convert(), (42, 50))
  1353.     Poopyhead_running_left_3_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_3.png').convert(), (42, 50))
  1354.     Poopyhead_running_left_4_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_4.png').convert(), (42, 50))
  1355.     Poopyhead_running_left_5_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_5.png').convert(), (42, 50))
  1356.     Poopyhead_running_left_6_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_6.png').convert(), (42, 50))
  1357.     Poopyhead_running_left_7_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_7.png').convert(), (42, 50))
  1358.     Poopyhead_running_left_8_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_8.png').convert(), (42, 50))
  1359.     Poopyhead_running_left_9_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_left_9.png').convert(), (42, 50))
  1360.  
  1361.     Poopyhead_running_right_1_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_1.png').convert(), (42, 50))
  1362.     Poopyhead_running_right_2_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_2.png').convert(), (42, 50))
  1363.     Poopyhead_running_right_3_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_3.png').convert(), (42, 50))
  1364.     Poopyhead_running_right_4_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_4.png').convert(), (42, 50))
  1365.     Poopyhead_running_right_5_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_5.png').convert(), (42, 50))
  1366.     Poopyhead_running_right_6_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_6.png').convert(), (42, 50))
  1367.     Poopyhead_running_right_7_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_7.png').convert(), (42, 50))
  1368.     Poopyhead_running_right_8_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_8.png').convert(), (42, 50))
  1369.     Poopyhead_running_right_9_img = pygame.transform.scale(pygame.image.load('defult_Enemy_poop_running_right_9.png').convert(), (42, 50))
  1370.    
  1371.     class Poopyhead(pygame.sprite.Sprite):
  1372.         def __init__(self, posx, posy, level):
  1373.             pygame.sprite.Sprite.__init__(self)
  1374.  
  1375.             self.image = Poopyhead_running_left_1_img
  1376.             self.rect = self.image.get_rect()
  1377.             self.rect.x, self.rect.y = posx, posy
  1378.  
  1379.             self.gravity = gravity
  1380.             self.direction = 'left'
  1381.             self.touching_floor = False
  1382.             self.alive = True
  1383.             self.coords = self.rect.x, self.rect.y
  1384.             self.level = level
  1385.  
  1386.             self.running_left_counter = 0
  1387.             self.running_right_counter = 0
  1388.             self.reset = False
  1389.             self.posx, self.posy = posx, posy
  1390.             self.killable = True
  1391.             self.ogx, self.ogy = posx, posy
  1392.  
  1393.         def high_iq_movement(self):
  1394.             if self.reset:
  1395.                 self.rect.x, self.rect.y = self.posx, self.posy
  1396.                 self.alive = True
  1397.                 self.reset = False
  1398.             if self.direction == 'right':
  1399.                 self.rect.x += 3
  1400.                 self.coords = self.rect.x, self.rect.y
  1401.                 self.running_right_counter += 1
  1402.                 if self.running_right_counter <= 10:
  1403.                     self.image = Poopyhead_running_right_1_img
  1404.                     self.image.set_colorkey(white)
  1405.                 elif self.running_right_counter <= 20:
  1406.                     self.image = Poopyhead_running_right_2_img
  1407.                     self.image.set_colorkey(white)
  1408.                 elif self.running_right_counter <= 30:
  1409.                     self.image = Poopyhead_running_right_3_img
  1410.                     self.image.set_colorkey(white)
  1411.                 elif self.running_right_counter <= 40:
  1412.                     self.image = Poopyhead_running_right_4_img
  1413.                     self.image.set_colorkey(white)
  1414.                 elif self.running_right_counter <= 50:
  1415.                     self.image = Poopyhead_running_right_5_img
  1416.                     self.image.set_colorkey(white)
  1417.                 elif self.running_right_counter <= 60:
  1418.                     self.image = Poopyhead_running_right_6_img
  1419.                     self.image.set_colorkey(white)
  1420.                 elif self.running_right_counter <= 70:
  1421.                     self.image = Poopyhead_running_right_7_img
  1422.                     self.image.set_colorkey(white)
  1423.                 elif self.running_right_counter <= 80:
  1424.                     self.image = Poopyhead_running_right_8_img
  1425.                     self.image.set_colorkey(white)
  1426.                 elif self.running_right_counter <= 90:
  1427.                     self.image = Poopyhead_running_right_9_img
  1428.                     self.image.set_colorkey(white)
  1429.                 else:
  1430.                     self.running_right_counter = 0
  1431.                    
  1432.             elif self.direction == 'left':
  1433.                 self.rect.x -= 3
  1434.                 self.coords = self.rect.x, self.rect.y
  1435.                 self.running_left_counter += 1
  1436.                 if self.running_left_counter <= 10:
  1437.                     self.image = Poopyhead_running_left_1_img
  1438.                     self.image.set_colorkey(white)
  1439.                 elif self.running_left_counter <= 20:
  1440.                     self.image = Poopyhead_running_left_2_img
  1441.                     self.image.set_colorkey(white)
  1442.                 elif self.running_left_counter <= 30:
  1443.                     self.image = Poopyhead_running_left_3_img
  1444.                     self.image.set_colorkey(white)
  1445.                 elif self.running_left_counter <= 40:
  1446.                     self.image = Poopyhead_running_left_4_img
  1447.                     self.image.set_colorkey(white)
  1448.                 elif self.running_left_counter <= 50:
  1449.                     self.image = Poopyhead_running_left_5_img
  1450.                     self.image.set_colorkey(white)
  1451.                 elif self.running_left_counter <= 60:
  1452.                     self.image = Poopyhead_running_left_6_img
  1453.                     self.image.set_colorkey(white)
  1454.                 elif self.running_left_counter <= 70:
  1455.                     self.image = Poopyhead_running_left_7_img
  1456.                     self.image.set_colorkey(white)
  1457.                 elif self.running_left_counter <= 80:
  1458.                     self.image = Poopyhead_running_left_8_img
  1459.                     self.image.set_colorkey(white)
  1460.                 elif self.running_left_counter <= 90:
  1461.                     self.image = Poopyhead_running_left_9_img
  1462.                     self.image.set_colorkey(white)
  1463.                 else:
  1464.                     self.running_left_counter = 0
  1465.             self.rect = self.image.get_rect()
  1466.             self.rect.x, self.rect.y = self.coords
  1467.  
  1468.             for enemy in enemy_sprites:
  1469.                 if enemy != self:
  1470.                     if self.direction == 'right':
  1471.                         if self.rect.right in range(enemy.rect.right - 3, enemy.rect.right + 3) or self.rect.left in range(enemy.rect.left - 3, enemy.rect.left + 3):
  1472.                             self.direction = 'left'
  1473.                     elif self.direction == 'left':
  1474.                         if self.rect.left in range(enemy.rect.left - 3, enemy.rect.left + 3) or self.rect.right in range(enemy.rect.right - 3, enemy.rect.right + 3):
  1475.                             self.direction = 'right'
  1476.  
  1477.             height = self.rect.bottom - self.rect.y
  1478.             width = self.rect.right - self.rect.x
  1479.             for floor in floors:
  1480.                 if self.rect.right in range(floor.rect.left, floor.rect.right) or self.rect.left in range(floor.rect.left, floor.rect.right):
  1481.                     if self.rect.bottom in range(floor.rect.y - 2, floor.rect.y + 30):
  1482.                         self.touching_floor = True
  1483.                         self.jumping = False
  1484.                         self.jump_initial_boost = True
  1485.                         self.rect.bottom = floor.rect.top
  1486.                         self.gravity = 1.8
  1487.                     else:
  1488.                         self.toucing_floor = False
  1489.                 else:
  1490.                     self.touching_floor = False
  1491.  
  1492.             for box in box_sprites:
  1493.                 if self.rect.right in range(box.rect.left, box.rect.right) or self.rect.left in range(box.rect.left, box.rect.right):
  1494.                     if self.rect.bottom in range(box.rect.y - 3, box.rect.y + 10):
  1495.                         self.touching_floor = True
  1496.                         self.jumping = False
  1497.                         self.rect.bottom = box.rect.top
  1498.                         self.gravity = 1.8
  1499.                     else:
  1500.                         self.touching_floor = False
  1501.                 else:
  1502.                     self.touching_floor = False
  1503.  
  1504.             if not self.alive:
  1505.                 self.kill()
  1506.    
  1507.     default_ground_1_img = pygame.image.load('default_Ground_1.png').convert()
  1508.     default_ground_under_1_img = pygame.image.load('default_Ground_under_1.png').convert()
  1509.  
  1510.     poop_bird_throw_sprites = []
  1511.     poopybird_birdpoop_img = pygame.transform.scale(pygame.image.load('Bird_POOP.png').convert(), (14, 18))
  1512.     class Poopy_Bird_Poop_Throw(pygame.sprite.Sprite):
  1513.         def __init__(self, posx, posy, level):
  1514.             pygame.sprite.Sprite.__init__(self)
  1515.  
  1516.             self.image = poopybird_birdpoop_img
  1517.             self.image.set_colorkey(white)
  1518.             self.rect = self.image.get_rect()
  1519.             self.rect.x, self.rect.y = posx, posy
  1520.             self.destination = fartman.rect.x
  1521.             self.level = level
  1522.            
  1523.             self.direction = None
  1524.             self.gravity = 0.8
  1525.             self.touching_floor = False
  1526.             self.delete = False
  1527.             if fartman.rect.x > self.rect.x:
  1528.                 self.direction = 'right'
  1529.             else:
  1530.                 self.direction = 'left'
  1531.  
  1532.         def throw(self):
  1533.             for box in box_sprites:
  1534.                 if self.rect.colliderect(box.rect):
  1535.                     self.delete = True
  1536.             for floor in floors:
  1537.                 if self.rect.colliderect(floor.rect):
  1538.                     self.delete = True
  1539.             if self.rect.y >= 1080:
  1540.                 self.delete = True
  1541.             if self.delete:
  1542.                 poop_bird_throw_sprites.remove(self)
  1543.                 gravity_sprites.remove(self)
  1544.                 enemy_sprites.remove(self)
  1545.  
  1546.         def high_iq_movement(self):
  1547.             pass
  1548.  
  1549.     poopybird_flyingleft_1_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Left_1.png').convert(), (70, 42))
  1550.     poopybird_flyingleft_2_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Left_2.png').convert(), (70, 42))
  1551.     poopybird_flyingleft_3_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Left_3.png').convert(), (70, 42))
  1552.    
  1553.     poopybird_flyingright_1_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Right_1.png').convert(), (70, 42))
  1554.     poopybird_flyingright_2_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Right_2.png').convert(), (70, 42))
  1555.     poopybird_flyingright_3_img = pygame.transform.scale(pygame.image.load('default_Enemy_poopBird_flying_Right_3.png').convert(), (70, 42))
  1556.     class Poopy_Bird(pygame.sprite.Sprite):
  1557.         def __init__(self, posx, posy, level):
  1558.             pygame.sprite.Sprite.__init__(self)
  1559.  
  1560.             self.image = poopybird_flyingleft_1_img
  1561.             self.image.set_colorkey(white)
  1562.             self.rect = self.image.get_rect()
  1563.             self.rect.x, self.rect.y = posx, posy
  1564.             self.arrived = False
  1565.             self.gravity = 0
  1566.            
  1567.             self.left_counter = 0
  1568.             self.right_counter = 0
  1569.             self.level = level
  1570.             self.ogx, self.ogy = posx, posy
  1571.            
  1572.             self.touching_floor = None
  1573.             self.random_locations = range(fartman.rect.x - 700, fartman.rect.x + 700)
  1574.             self.random_location = random.choice(self.random_locations)
  1575.             self.timer = pygame.time.get_ticks()
  1576.             self.throw_cd = pygame.time.get_ticks()
  1577.             self.killable = True
  1578.  
  1579.         def high_iq_movement(self):
  1580.             timer = pygame.time.get_ticks()
  1581.             if self.rect.x not in range(self.random_location - 5, self.random_location + 5):
  1582.                 if self.random_location > self.rect.x:
  1583.                     self.rect.x += 8
  1584.                     self.left_counter += 1
  1585.                     if self.left_counter <= 12:
  1586.                         self.image = poopybird_flyingright_1_img
  1587.                     elif self.left_counter <= 24:
  1588.                         self.image = poopybird_flyingright_2_img
  1589.                     elif self.left_counter <= 36:
  1590.                         self.image = poopybird_flyingright_3_img
  1591.                     elif self.left_counter <= 48:
  1592.                         self.image = poopybird_flyingright_2_img
  1593.                     elif self.left_counter >= 60:
  1594.                         self.left_counter = 0
  1595.                     self.image.set_colorkey(white)
  1596.                 elif self.random_location < self.rect.x:
  1597.                     self.rect.x -= 8
  1598.                     self.right_counter += 1
  1599.                     if self.right_counter <= 12:
  1600.                         self.image = poopybird_flyingleft_1_img
  1601.                     elif self.right_counter <= 24:
  1602.                         self.image = poopybird_flyingleft_2_img
  1603.                     elif self.right_counter <= 36:
  1604.                         self.image = poopybird_flyingleft_3_img
  1605.                     elif self.right_counter <= 48:
  1606.                         self.image = poopybird_flyingleft_2_img
  1607.                     elif self.right_counter >= 60: # make is so that when it has stopped moving, it plays the facing towards animations
  1608.                         self.right_counter = 0
  1609.                     self.image.set_colorkey(white)
  1610.             else:
  1611.                 if timer - self.timer >= 4500:
  1612.                     self.random_locations = range(fartman.rect.x - 1200, fartman.rect.x + 1200)
  1613.                     self.random_location = random.choice(self.random_locations)
  1614.                     self.timer = timer
  1615.  
  1616.             if timer - self.throw_cd >= 5000 and self.rect.centerx in range(fartman.rect.left - 15, fartman.rect.right + 15):
  1617.                 for i in range(0,1):
  1618.                     i = Poopy_Bird_Poop_Throw(self.rect.x,self.rect.y, self.level) # change here to make the poop actually come out of their hand
  1619.                     poop_bird_throw_sprites.append(i)
  1620.                     gravity_sprites.append(i)
  1621.                     enemy_sprites.append(i)
  1622.                     scroll_sprites.append(i)
  1623.                 self.throw_cd = timer
  1624.    
  1625.     class Ground(pygame.sprite.Sprite): # MAKE LEVELS A SEPERATE SCRIPT SO IT DOESN'T ALL LOOK LIKE SHIT
  1626.         def __init__(self, posx, posy, level, array): # LITERALLY JUST PUT THE CLASS IN THE OTEHR SCRIPT WHO THE FUCK CARES IF IT LOOKS LIKE SHIT
  1627.             pygame.sprite.Sprite.__init__(self)
  1628.  
  1629.             # change later
  1630.             self.image = default_ground_1_img
  1631.             self.rect = self.image.get_rect()
  1632.             self.level = level
  1633.             self.rect.x, self.rect.y = posx, posy
  1634.             self.legit = True
  1635.             self.reset = False
  1636.            
  1637.             self.posx, self.posy = posx, posy
  1638.             self.under_floor_sprites = []
  1639.             self.no_left = False
  1640.             self.no_right = False
  1641.             self.is_popout_sword = False
  1642.             self.no_left = False
  1643.             self.no_right = False
  1644.  
  1645.             self.ihd1 = pygame.sprite.Sprite()
  1646.             self.ihd1.image = pygame.Surface((10,self.rect.height - 10))
  1647.             self.ihd1.image.fill(red)
  1648.             self.ihd1.image.set_colorkey(white)
  1649.             self.ihd1.rect = self.ihd1.image.get_rect()
  1650.             self.ihd1.rect.x, self.ihd1.rect.y = posx, self.rect.y
  1651.             self.ihd1.legit = False
  1652.            
  1653.             self.ihd2 = pygame.sprite.Sprite()
  1654.             self.ihd2.image = pygame.Surface((10,self.rect.height - 10))
  1655.             self.ihd2.image.fill(white)
  1656.             self.ihd2.image.set_colorkey(white)
  1657.             self.ihd2.rect = self.ihd1.image.get_rect()
  1658.             self.ihd2.rect.x, self.ihd2.rect.y = self.rect.right + 5, self.rect.y # after this, do portals
  1659.        
  1660.             for i in range(0,1):
  1661.                 i = pygame.sprite.Sprite()
  1662.                 i.image = default_ground_under_1_img
  1663.                 i.rect=i.image.get_rect()
  1664.                 i.rect.x,i.rect.y=self.rect.x,self.rect.bottom
  1665.                 i.legit = False
  1666.                 i.level = self.level
  1667.                 array.append(i)
  1668.                 self.under_floor_sprites.append(i)
  1669.  
  1670.         def update(self):
  1671.             area_y = range(self.rect.top, self.rect.bottom)
  1672.             if fartman.rect.colliderect(self.ihd1):
  1673.                 print('collision with left side')
  1674.             if self.reset:
  1675.                 self.rect.x, self.rect.y = self.posx, self.posy
  1676.                 self.reset = False
  1677.             for y in area_y:
  1678.                 if y in range(fartman.rect.top, fartman.rect.bottom - 5):
  1679.                     if fartman.rect.right in range(self.rect.left - 2, self.rect.right + 2) or fartman.rect.left in range(self.rect.left - 2, self.rect.right + 2):
  1680.                         pass
  1681.             if fartman.rect.top in range(self.rect.top + 5, self.rect.bottom) or fartman.rect.bottom in range(self.rect.top + 5, self.rect.bottom) or fartman.rect.centery in range(self.rect.top + 5, self.rect.bottom) or fartman.rect.centery + 25 in range(self.rect.top + 5, self.rect.bottom) or fartman.rect.centery - 25 in range(self.rect.top + 5, self.rect.bottom):
  1682.                 if fartman.rect.left in range(self.rect.left - 5, self.rect.right + 5) or fartman.rect.right in range(self.rect.left - 5, self.rect.right + 5):
  1683.                     if fartman.direction == 'left':
  1684.                         fartman.no_left = True
  1685.                         self.no_left = True
  1686.                         fartman.jump_time = 0
  1687.                      #   fartman.no_right = False
  1688.                     elif fartman.direction == 'right':
  1689.                         fartman.no_right = True
  1690.                         fartman.jump_time = 0
  1691.                         self.no_right = True
  1692.                     #    fartman.no_left = False
  1693.                 else:
  1694.                     self.no_right = False
  1695.                     self.no_left = False
  1696.             else:
  1697.                 self.no_right = False
  1698.                 self.no_left = False
  1699.  
  1700.     default_block_img = pygame.transform.scale(pygame.image.load('default_Block_1.png').convert(), (55, 55))
  1701.     default_itemblock_img = pygame.transform.scale(pygame.image.load('default_ItemBlock_1.png').convert(), (55,55))
  1702.     itemblock_hit_img = pygame.transform.scale(pygame.image.load('default_itemBlock_after_being_hit_1.png').convert(), (55, 55))
  1703.     class Box(pygame.sprite.Sprite):
  1704.         def __init__(self, posx, posy, type_, level):
  1705.             pygame.sprite.Sprite.__init__(self)
  1706.  
  1707.             if type_ == 'loot':
  1708.                 self.image = default_itemblock_img
  1709.             else:
  1710.                 self.image = default_block_img
  1711.                
  1712.             self.rect = self.image.get_rect()
  1713.             self.level = level
  1714.             self.type = type_
  1715.             self.rect.x, self.rect.y = posx, posy
  1716.             self.posx, self.posy = posx, posy
  1717.             self.reset = False
  1718.  
  1719.             self.ihd1 = pygame.sprite.Sprite()
  1720.             self.ihd1.image = pygame.Surface((500,55))
  1721.             self.ihd1.image.fill(white)
  1722.             self.ihd1.image.set_colorkey(white)
  1723.             self.ihd1.rect = self.ihd1.image.get_rect()
  1724.             self.ihd1.rect.x, self.ihd1.rect.y = self.rect.x - 5, self.rect.y
  1725.            
  1726.             self.ihd2 = pygame.sprite.Sprite()
  1727.             self.ihd2.image = pygame.Surface((500,55))
  1728.             self.ihd2.image.fill(white)
  1729.             self.ihd2.image.set_colorkey(white)
  1730.             self.ihd2.rect = self.ihd1.image.get_rect()
  1731.             self.ihd2.rect.x, self.ihd2.rect.y = self.rect.right + 5, self.rect.y
  1732.  
  1733.             if self.type == 'loot':
  1734.                 self.is_powerup = ['powerup'] # Odds for whether it releases a coin or a powerup. add more coins to decrease the chance of a powerup
  1735.                 self.powerup = random.choice(self.is_powerup)
  1736.                 self.powerups = ['Big', 'poop', 'platform', 'fast', 'rotating orbs']
  1737.                 self.random_powerup = random.choice(self.powerups)
  1738.             self.stop = False
  1739.             self.broken = False
  1740.             self.broke = False
  1741.             self.skia = []
  1742.             self.no_left = False
  1743.             self.no_right = False
  1744.  
  1745.         def update(self):
  1746.             if fartman.rect.top in range(self.rect.bottom -5, self.rect.bottom + 5):
  1747.                 if fartman.rect.left in range(self.rect.left, self.rect.right + 10) or fartman.rect.right in range(self.rect.left - 10, self.rect.right + 10) or fartman.rect.centerx in range(self.rect.left - 10, self.rect.right + 10):
  1748.                     if fartman.jump_time >= 250 and fartman.jump_time <= 1000:
  1749.                         self.broken = True
  1750.                         print('me break')
  1751.            
  1752.             x = self.rect.width
  1753.             area = range(0,x)
  1754.             fartman.invisible_detection.rect.centerx, fartman.invisible_detection.rect.top = fartman.rect.centerx, fartman.rect.top - 1
  1755.             self.ihd2.rect.x, self.ihd2.rect.y = self.rect.right + 5, self.rect.y
  1756.             self.ihd1.rect.x, self.ihd1.rect.y = self.rect.x - 5, self.rect.y
  1757.             if fartman.rect.top in range(self.rect.top + 10, self.rect.bottom) or fartman.rect.bottom in range(self.rect.top + 10, self.rect.bottom) or fartman.rect.top + 30 in range(self.rect.top + 10, self.rect.bottom) or fartman.rect.top + 60 in range(self.rect.top + 10,self.rect.bottom):
  1758.                 if fartman.rect.left in range(self.rect.left, self.rect.right) or fartman.rect.right in range(self.rect.left, self.rect.right) or fartman.rect.centerx in range(self.rect.left, self.rect.right): # MAKE A COUNTER
  1759.                     if fartman.direction == 'left':
  1760.                         fartman.no_left = True
  1761.                         self.no_left = True
  1762.                         fartman.jump_time = 0
  1763.                      #   fartman.no_right = False
  1764.                     elif fartman.direction == 'right':
  1765.                         fartman.no_right = True
  1766.                         fartman.jump_time = 0
  1767.                         self.no_right = True
  1768.                     #    fartman.no_left = False
  1769.                 else:
  1770.                     self.no_right = False
  1771.                     self.no_left = False
  1772.             else:
  1773.                 self.no_right = False
  1774.                 self.no_left = False
  1775.                        
  1776.  
  1777.             if self.rect.colliderect(fartman.invisible_detection.rect):
  1778.                 print(fartman.jump_time)
  1779.                 if fartman.jump_time <= 1000 and fartman.jump_time >= 10:
  1780.                     self.broken = True
  1781.                     fartman.jumping = False
  1782.                     if self.type == 'no loot':
  1783.                         box_sprites.remove(self)
  1784.                            
  1785.             if self.reset:
  1786.                 self.rect.x, self.rect.y = self.posx, self.posy
  1787.                 counter = 0
  1788.                 if self.broken:
  1789.                     for i in range(0,1):
  1790.                         i = Box(self.posx, self.posy, self.type, self.level)
  1791.                         box_sprites.add(self)
  1792.                 for sprite in box_sprites:
  1793.                     if sprite != self:
  1794.                         counter += 1
  1795.                 if counter == len(box_sprites) - 1:
  1796.                     if self.broken:
  1797.                         for i in range(0,1):
  1798.                             i = Box(self.posx, self.posy, self.type, self.level)
  1799.                             box_sprites.add(i)
  1800.                             scroll_sprites.append(i)
  1801.                        
  1802.                 self.broken = False
  1803.                 if self.type == 'loot':
  1804.                     self.is_powerup = ['powerup'] # Odds for whether it releases a coin or a powerup. add more coins to decrease the chance of a powerup
  1805.                     self.powerup = random.choice(self.is_powerup)
  1806.                     self.powerups = ['Big', 'poop']
  1807.                     self.random_powerup = random.choice(self.powerups)
  1808.                 self.reset = False
  1809.                
  1810.             if self.type == 'loot':
  1811.                 if not self.stop:
  1812.                     if self.powerup == 'powerup':
  1813.                         if self.broken: # draw box over powerup
  1814.                             self.image = itemblock_hit_img
  1815.                             if self.random_powerup == 'Big':
  1816.                                 print('scra')
  1817.                                 for i in range(0,1):
  1818.                                     i = Powerup_Sprite(self.rect.x, self.rect.y, self.level, 'Big')
  1819.                                     i.releasing = True
  1820.                                     powerup_sprites.append(i)
  1821.                                     gravity_sprites.append(i)
  1822.                                     scroll_sprites.append(i)
  1823.                                 self.stop = True
  1824.                             elif self.random_powerup == 'poop':
  1825.                                 for i in range(0, 1):
  1826.                                   i = Powerup_Sprite(self.rect.x, self.rect.y, self.level, 'poop')
  1827.                                   i.releasing = True
  1828.                                   powerup_sprites.append(i)
  1829.                                   gravity_sprites.append(i)
  1830.                                   scroll_sprites.append(i)
  1831.                                 self.stop = True
  1832.                             elif self.random_powerup == 'platform':
  1833.                                 for i in range(0,1):
  1834.                                     i = Powerup_Sprite(self.rect.x, self.rect.y, self.level, 'platform')
  1835.                                     i.releasing = True
  1836.                                     powerup_sprites.append(i)
  1837.                                     gravity_sprites.append(i)
  1838.                                     scroll_sprites.append(i)
  1839.                                 self.stop = True
  1840.                             elif self.random_powerup == 'fast':
  1841.                                 for i in range(0,1):
  1842.                                     i = Powerup_Sprite(self.rect.x, self.rect.y, self.level, 'fast')
  1843.                                     i.releasing = True
  1844.                                     powerup_sprites.append(i)
  1845.                                     gravity_sprites.append(i)
  1846.                                     scroll_sprites.append(i)
  1847.                                 self.stop = True
  1848.                             elif self.random_powerup == 'rotating orbs':
  1849.                                 for i in range(0,1):
  1850.                                     i = Powerup_Sprite(self.rect.x, self.rect.y, self.level, 'rotating orbs')
  1851.                                     i.releasing = True
  1852.                                     powerup_sprites.append(i)
  1853.                                     gravity_sprites.append(i)
  1854.                                     scroll_sprites.append(i)
  1855.                                 self.stop = True
  1856.             else:
  1857.                 if self.broken:
  1858.                     self.rect.x = -1000
  1859.  
  1860.     class Powerup_Sprite(pygame.sprite.Sprite):
  1861.         def __init__(self, posx, posy, level, type_):
  1862.             pygame.sprite.Sprite.__init__(self)
  1863.  
  1864.             self.image = pygame.Surface((55, 55)) # SIZE OF BOX
  1865.             self.image.fill(cyan)
  1866.             self.rect = self.image.get_rect()
  1867.             self.directions = ['left', 'right']
  1868.             self.direction = random.choice(self.directions)
  1869.  
  1870.             self.starting_y = posy
  1871.             self.level = level
  1872.             self.rect.x, self.rect.y = posx, posy
  1873.             self.releasing = False
  1874.             self.released = False
  1875.             self.no_direction_change = True
  1876.  
  1877.             self.reset = False
  1878.             self.timer = pygame.time.get_ticks()
  1879.             self.touching_floor = True
  1880.             self.gravity = gravity
  1881.             self.type = type_
  1882.             self.gravity_counter = 0
  1883.             self.timer = pygame.time.get_ticks()
  1884.  
  1885.         def update(self):
  1886.             timer = pygame.time.get_ticks()
  1887.             self.gravity_counter = 0
  1888.             if self.reset:
  1889.                 powerup_sprites.remove(self)
  1890.             timer = pygame.time.get_ticks()
  1891.             gravity_func(self)
  1892.             if self.releasing:
  1893.                 if self.rect.bottom > self.starting_y:
  1894.                     self.rect.y -= 3
  1895.                 else:
  1896.                     if timer - self.timer >= 475:
  1897.                         self.released = True
  1898.                         self.releasing = False
  1899.  
  1900.             if self.released:
  1901.                 for floor in floors:
  1902.                     if self.rect.right in range(floor.rect.left, floor.rect.right) or self.rect.left in range(floor.rect.left, floor.rect.right):
  1903.                         if self.rect.bottom in range(floor.rect.y - 2, floor.rect.y + 30):
  1904.                             self.touching_floor = True
  1905.                             self.rect.bottom = floor.rect.top
  1906.                             self.gravity = 1.8
  1907.                             self.gravity_counter = 0
  1908.                         else:
  1909.                             self.toucing_floor = False
  1910.                             self.gravity_counter += 1
  1911.                     else:
  1912.                         self.touching_floor = False
  1913.                         self.gravity_counter += 1
  1914.  
  1915.                 for box in box_sprites:
  1916.                     if self.rect.right in range(box.rect.left, box.rect.right) or self.rect.left in range(box.rect.left, box.rect.right):
  1917.                         if self.rect.bottom in range(box.rect.y - 3, box.rect.y + 10):
  1918.                             self.touching_floor = True
  1919.                             self.rect.bottom = box.rect.top
  1920.                             self.gravity = 1.8
  1921.                             self.gravity_counter = 0
  1922.                         else:
  1923.                             self.touching_floor = False
  1924.                             self.gravity_counter += 1
  1925.                     else:
  1926.                         self.touching_floor = False
  1927.                         self.gravity_counter += 1
  1928.  
  1929.                 if self.gravity_counter < len(box_sprites) + len(floors):
  1930.                     self.touching_floor = True
  1931.                 else:
  1932.                     self.touching_floor = False
  1933.  
  1934.                 try:
  1935.                     if not self.touching_floor:
  1936.                         self.gravity *= 1.025
  1937.                         self.rect.y += self.gravity
  1938.                 except:
  1939.                     pass
  1940.  
  1941.                 if self.direction == 'right':
  1942.                     self.rect.x += 4
  1943.                 else:
  1944.                     self.rect.x -= 4
  1945.  
  1946.     class End_Level_Portapotty(pygame.sprite.Sprite):
  1947.         def __init__(self, posx, posy, level, type_):
  1948.             pygame.sprite.Sprite.__init__(self)
  1949.             self.image = pygame.Surface((200, 400))
  1950.             self.image.fill(green)
  1951.             self.rect = self.image.get_rect()
  1952.             self.rect.x, self.rect.bottom = posx, posy
  1953.             self.level_end = False
  1954.             self.level = level
  1955.             self.type = type_
  1956.             # Add self.reset to reset this
  1957.    
  1958.         def update(self): # make the portapotty into two sprites.
  1959.             pass
  1960.  
  1961.     def gravity_func(obj):
  1962.         for floor in floors:
  1963.             if obj.rect.right in range(floor.rect.left, floor.rect.right) or obj.rect.left in range(floor.rect.left, floor.rect.right):
  1964.                 if obj.rect.bottom in range(floor.rect.y - 2, floor.rect.y + 30):
  1965.                     obj.touching_floor = True
  1966.                 else:
  1967.                     obj.touching_floor = False
  1968.             else:
  1969.                 obj.touching_floor = False
  1970.  
  1971.         for box in box_sprites:
  1972.             if obj.rect.right in range(box.rect.left, box.rect.right) or obj.rect.left in range(box.rect.left, box.rect.right):
  1973.                 if obj.rect.bottom in range(box.rect.y - 2, box.rect.y + 30):
  1974.                     obj.touching_floor = True
  1975.                 else:
  1976.                     obj.touching_floor = False
  1977.             else:
  1978.                 obj.touching_floor = False
  1979.  
  1980.     pygame.font.init()
  1981.     def draw():
  1982.         font = pygame.font.SysFont('Comic Sans MS', 36)
  1983.         textSurface = font.render("Score: " + str(fartman.score), False, (0,0,0))
  1984.         textSurface2 = font.render("Lives " + str(fartman.lives), False, (0, 0, 0))
  1985.         blit_images = []
  1986.         window.blit(textSurface, (10,10))
  1987.         window.blit(textSurface2, ((10,50)))
  1988.  
  1989.         if fartman.editing_mode:
  1990.             textSurface3 = font.render("B for an empty box", False, (0,0,0))
  1991.             textSurface4 = font.render("V for a loot box", False, (0,0,0))
  1992.             textSurface5 = font.render("E for a Poopyhead", False,(0,0,0))
  1993.             textSurface6 = font.render("L for a Poopy Bird", False, (0,0,0))
  1994.             textSurface7 = font.render("1 for a Left Popout Sword", False, (0,0,0))
  1995.             textSurface8 = font.render("2 for a Right Popout Sword", False, (0,0,0))
  1996.             textSurface9 = font.render("3 for a Up Popout Sword", False, (0,0,0))
  1997.             textSurface10 = font.render("4 for a Down Popout Sword", False, (0,0,0))
  1998.             textSurface11 = font.render('O is for the end Portapotty', False, (0,0,0))
  1999.             textSurface12 = font.render('M is for a left-shooting cannon', False, (0,0,0))
  2000.             textSurface13 = font.render('N is for a right-shooting cannon', False, (0,0,0))
  2001.  
  2002.             window.blit(textSurface3, (300, 100))
  2003.             window.blit(textSurface4, (300, 140))
  2004.             window.blit(textSurface5, (300, 180))
  2005.             window.blit(textSurface6, (300, 220))
  2006.             window.blit(textSurface7, (300, 260))
  2007.             window.blit(textSurface8, (300, 300))
  2008.             window.blit(textSurface9, (300, 340))
  2009.             window.blit(textSurface10, (300, 380))
  2010.             window.blit(textSurface11, (300, 420))
  2011.             window.blit(textSurface12, (300, 460))
  2012.             window.blit(textSurface13, (300, 500))
  2013.    
  2014.     for floor in floors:
  2015.         scroll_sprites.append(floor)
  2016.     for box in box_sprites:
  2017.         scroll_sprites.append(box)
  2018.    
  2019.     left_click = False
  2020.     right_click = True
  2021.     if level_1_load:
  2022.         level_file = open('level_1.txt', 'r')
  2023.     elif level_2_load:
  2024.         level_file = open('level_2.txt', 'r')
  2025.  
  2026.     level_1_regex = re.compile(r'([^,])')
  2027.     xd = []
  2028.  
  2029.     lines = ''
  2030.     for line in level_file.readlines():
  2031.         lines += line
  2032.         xd.append(line)
  2033.  
  2034.     search = level_1_regex.findall(lines)
  2035.     sox = level_1_regex.findall(lines)
  2036.     sox = ''.join(sox)
  2037.     fake_deal = []
  2038.     real_deal = []
  2039.  
  2040.     def convert_string(string):
  2041.         li = string.split(" ")
  2042.         return li
  2043.  
  2044.     for i in xd:
  2045.         for skra in xd:
  2046.             a = convert_string(skra)
  2047.             fake_deal.append(a)
  2048.     real_deal = fake_deal[:int(len(fake_deal)/2)]
  2049.  
  2050.     fartmen_presents_img = pygame.image.load('FARTMENPRESENTS.png').convert()
  2051.     grayscreen_img = pygame.image.load('grayscreen.png').convert()
  2052.     fartmen_presents_fartman_img = pygame.image.load('FARTMENPRESENTFARTMAN.png').convert()
  2053.     starting_animation_playing = False
  2054.  
  2055.     grayscreen = pygame.sprite.Sprite()
  2056.     grayscreen.image = grayscreen_img
  2057.     grayscreen.rect = grayscreen.image.get_rect()
  2058.     fartmen_presents = pygame.sprite.Sprite()
  2059.     fartmen_presents.image = fartmen_presents_img
  2060.     fartmen_presents.rect = fartmen_presents.image.get_rect()
  2061.  
  2062.     fartman_animation = pygame.sprite.Sprite()
  2063.     fartman_animation.image = pygame.transform.scale(fartman_standing_1_img, (3000, 6000))
  2064.     fartman_animation.rect = fartman_animation.image.get_rect()
  2065.     fartman_animation.rect.right = width / 2
  2066.     fartmen_presents_fartman = pygame.sprite.Sprite()
  2067.     fartmen_presents_fartman.image = fartmen_presents_fartman_img
  2068.     fartmen_presents_fartman.rect = fartmen_presents_fartman.image.get_rect()
  2069.     shalack = True
  2070.     b=0
  2071.  
  2072.     loading_img = pygame.image.load('loading.png').convert()
  2073.     loading = pygame.sprite.Sprite()
  2074.     loading.image = loading_img
  2075.     loading.rect = loading.image.get_rect()
  2076.     loading_bar = pygame.sprite.Sprite()
  2077.     loading_bar.image = pygame.Surface((1, 92))
  2078.     loading_bar.image.fill((201, 201,2))
  2079.     loading_bar.rect = loading_bar.image.get_rect()
  2080.     loadingtf = False
  2081.  
  2082.     loopable_bg_1 = pygame.image.load('Fartman_Background_1.png').convert()
  2083.     loopable_bg = pygame.sprite.Sprite()
  2084.     loopable_bg.image = loopable_bg_1
  2085.     loopable_bg.rect = loopable_bg.image.get_rect()
  2086.     loopable_bg_counter = 0
  2087.     loopable_bgs = []
  2088.    
  2089.     while running:
  2090.         clock.tick(60)
  2091.         for event in pygame.event.get():
  2092.             if event.type == pygame.QUIT:
  2093.                 pygame.quit()
  2094.                 pygame.display.quit()
  2095.                 sys.exit()
  2096.                 running = False
  2097.             if event.type == pygame.MOUSEBUTTONDOWN:
  2098.                 if event.button == 1:
  2099.                     left_click = True
  2100.                     right_click = False
  2101.                 elif event.button == 3:
  2102.                     right_click = True
  2103.                     left_click = False
  2104.             else:
  2105.                 left_click = False
  2106.                 right_click = False
  2107.  
  2108.         if fartman.load: #SHOW LOADING SCREEN HERE
  2109.             salami = True
  2110.             if fartman.level_2_load:
  2111.                 print('loading level 2')
  2112.                 level_file = open('level_2.txt', 'r')
  2113.                 loopable_bg = loopable_bg_2
  2114.             elif fartman.level_1_load:
  2115.                 print('loading level 1')
  2116.                 level_file = open('level_1.txt', 'r')
  2117.                 loopable_bg = loopable_bg_1
  2118.             else:
  2119.                 print('Incorrect loading of the level')
  2120.  
  2121.             window.blit(loading.image, loading.rect)
  2122.             lines = ''
  2123.             newlines=0
  2124.             newlines_counter=0
  2125.             for line in level_file.readlines():
  2126.                 lines += line
  2127.                 xd.append(line)
  2128.                 fake_deal = []
  2129.                 real_deal = []
  2130.                 newlines += 1
  2131.                 for i in xd:
  2132.                     for skra in xd:
  2133.                         a = convert_string(skra)
  2134.                         fake_deal.append(a)
  2135.             real_deal = fake_deal[:int(len(fake_deal)/2)]
  2136.  
  2137.             counter = 0
  2138.             for loop in range(0,10):
  2139.                 loop = pygame.sprite.Sprite()
  2140.                 loop.image = loopable_bg
  2141.                 loop.rect = loop.image.get_rect()
  2142.                 loop.rect.x = 1920 * counter
  2143.                 counter += 1
  2144.                 loopable_bgs.append(loop)
  2145.            
  2146.             loot_counter = 0
  2147.             if newlines <= 0:
  2148.                 newlines = 1
  2149.             amount_to_increase_bar = 1219/newlines
  2150.             loadingtf = True
  2151.             if salami and int(newlines) > int(newlines_counter):
  2152.                 for aspect in real_deal:
  2153.                     if newlines_counter >= newlines:
  2154.                         break
  2155.                    
  2156.                     loot_counter = 0
  2157.                     time.sleep(0.01)
  2158.                     newlines_counter += 1
  2159.                     loading_bar.image = pygame.Surface((1 + amount_to_increase_bar * newlines_counter, 92))
  2160.                     loading_bar.image.fill((201,201,2))
  2161.                     loading_bar.rect.x, loading_bar.rect.y = 351, 529
  2162.                     window.blit(loading.image, loading.rect)
  2163.                     window.blit(loading_bar.image, loading_bar.rect)
  2164.                     pygame.display.flip()
  2165.                     pygame.event.get()
  2166.                    
  2167.                     for i in aspect:
  2168.                         if newlines_counter >= newlines:
  2169.                             break
  2170.                         if loot_counter != 1:
  2171.                             type_ = aspect[0]                
  2172.                             if type_ == 'B':
  2173.                                 x = aspect[1]
  2174.                                 y = aspect[2]
  2175.                                 type2_ = aspect[3]
  2176.                                 level = aspect[4]
  2177.                                 i = Box(int(x), int(y), type2_, level)
  2178.                                 box_sprites.add(i)
  2179.                                 scroll_sprites.append(i)
  2180.                                 loot_counter += 1
  2181.                             elif type_ == 'G':
  2182.                                 x = aspect[1]
  2183.                                 y = aspect[2]
  2184.                                 level = aspect[3]
  2185.                                 array = aspect[4]
  2186.                                 i = Ground(int(x), int(y), level, floors)
  2187.                                 i.legit = True
  2188.                                 floors.append(i)
  2189.                                 scroll_sprites.append(i)
  2190.                                 loot_counter += 1
  2191.                             elif type_ == 'P':
  2192.                                 x = aspect[1]
  2193.                                 y = aspect[2]
  2194.                                 level = aspect[3]
  2195.                                 i = Poopyhead(int(x), int(y), level)
  2196.                                 i.touching_floor = False
  2197.                                 scroll_sprites.append(i)
  2198.                                 enemy_sprites.append(i)
  2199.                                 loot_counter += 1
  2200.                                 gravity_sprites.append(enemy_sprites)
  2201.                             elif type_ == 'L':
  2202.                                 x = aspect[1]
  2203.                                 y = aspect[2]
  2204.                                 level = aspect[3]
  2205.                                 i = Poopy_Bird(int(x), int(y), level)
  2206.                                 scroll_sprites.append(i)
  2207.                                 enemy_sprites.append(i)
  2208.                                 loot_counter += 1
  2209.                             elif type_ == '1':
  2210.                                 x = aspect[1]
  2211.                                 y = aspect[2]
  2212.                                 level = aspect[4]
  2213.                                 direction = aspect[3]
  2214.                                 i = Popout_Sword(int(x), int(y), direction, level)
  2215.                                 enemy_sprites.append(i)
  2216.                                 scroll_sprites.append(i)
  2217.                                 scroll_sprites.append(i.b)
  2218.                                 floors.append(i.b)
  2219.                                 loot_counter += 1
  2220.                             elif type_ == 'O':
  2221.                                 x=aspect[1]
  2222.                                 y=aspect[2]
  2223.                                 if aspect[3] == 'True':
  2224.                                     tf = True
  2225.                                 level = aspect[4]
  2226.                                 i = Portapotty(int(x), int(y), tf, level)
  2227.                                 scroll_sprites.append(i)
  2228.                                 portapotty_sprites.append(i)
  2229.                                 loot_counter += 1
  2230.                             elif type_ == 'M':
  2231.                                 x=aspect[1]
  2232.                                 y=aspect[2]
  2233.                                 direction=aspect[3]
  2234.                                 level = aspect[4]
  2235.                                 i = Cannon(int(x), int(y), direction, level)
  2236.                                 scroll_sprites.append(i)
  2237.                                 no_move_enemy_sprites.append(i)
  2238.                                 loot_counter += 1
  2239.                                
  2240.                 salami = False
  2241.  
  2242.             if fartman.level_2_load:
  2243.                 fartman.level_2_load = False
  2244.             if fartman.level_1_load:
  2245.                 fartman.level_1_load = False
  2246.             fartman.load = False
  2247.             fartman.edit_load = False
  2248.                            
  2249.         a=0
  2250.         b=0
  2251.         for sprite in fartman.platforms:
  2252.             a+=sprite.left_counter
  2253.             b+=sprite.right_counter
  2254.         if a >= len(fartman.platforms):
  2255.             fartman.no_left = False
  2256.         else:
  2257.             fartman.no_left = True
  2258.         if b >= len(fartman.platforms):
  2259.             fartman.no_right = False
  2260.         else:
  2261.             fartman.no_right = True
  2262.         if fartman.editing_mode:
  2263.             fartman.Editing_Mode()
  2264.         try:
  2265.             if not starting_animation_playing and not main_menu.showing and not fartman.load:
  2266.                 for sprite in enemy_sprites:
  2267.                     if not sprite.touching_floor:
  2268.                         sprite.gravity *= 1.025
  2269.                         sprite.rect.y += sprite.gravity
  2270.                     elif sprite.touching_floor == None:
  2271.                         pass
  2272.                     else:
  2273.                         sprite.gravity = 1.8
  2274.  
  2275.                     for box in box_sprites:
  2276.                         if sprite.rect.right in range(box.rect.left-5, box.rect.right+5) or sprite.rect.left in range(box.rect.left-5, box.rect.right+5):
  2277.                             if sprite.rect.bottom in range(box.rect.y - 5, box.rect.y + 10):
  2278.                                 sprite.touching_floor = True
  2279.                             else:
  2280.                                 sprite.touching_floor = False
  2281.                         else:
  2282.                             sprite.touching_floor = False
  2283.         except:
  2284.             pass
  2285.         try:
  2286.             if not main_menu.showing and not starting_animation_playing and not fartman.load:
  2287.                 for sprite in gravity_sprites:
  2288.                     if not sprite.touching_floor:
  2289.                         sprite.gravity = sprite.gravity * 1.025
  2290.                         sprite.rect.y += sprite.gravity
  2291.                     else:
  2292.                         sprite.gravity = 1.8
  2293.         except:
  2294.             pass
  2295.        
  2296.         for sprite in enemy_sprites:
  2297.             if not main_menu.showing and not starting_animation_playing and not fartman.load:
  2298.                 if fartman.rect.right in range(sprite.rect.x - 1000, sprite.rect.x + 1000):
  2299.                     sprite.high_iq_movement()
  2300.                     if sprite.alive == False:
  2301.                         enemy_sprites.remove(sprite)
  2302.                     sprite.update()
  2303.                 else:
  2304.                     sprite.gravity = 1.8
  2305.                     sprite.touching_floor = True
  2306.        
  2307.         window.fill(white)
  2308.  
  2309.         if main_menu.showing:
  2310.             mx, my = pygame.mouse.get_pos()
  2311.             if main_menu.new.rect.collidepoint(mx, my):
  2312.                 main_menu.new.image = main_menu.new.highlighted_img # change here to make new game/continue/quit
  2313.                 if left_click:
  2314.                     starting_animation_playing = True
  2315.                     main_menu.showing = False
  2316.             else:
  2317.                 main_menu.new.image = main_menu.new.og_image
  2318.             if main_menu.continue_.rect.collidepoint(mx, my):
  2319.                 main_menu.continue_.image = main_menu.continue_.highlighted_img
  2320.                 if left_click:
  2321.                     fartman.load = True # change here to load files with continue
  2322.                     fartman.level_1_load = True
  2323.                     starting_animation_playing = False
  2324.                     main_menu.showing = False # Change shit here to incorporate save files later.
  2325.             else:
  2326.                 main_menu.continue_.image = main_menu.continue_.og_image
  2327.             if main_menu.quit.rect.collidepoint(mx, my):
  2328.                 main_menu.quit.image = main_menu.quit.highlighted_img
  2329.                 if left_click:
  2330.                     pygame.quit()
  2331.                     pygame.display.quit()
  2332.                     sys.exit()
  2333.                     running = False
  2334.             else:
  2335.                 main_menu.quit.image = main_menu.quit.og_image
  2336.            
  2337.             for sprite in mm_sprites:
  2338.                 window.blit(sprite.image, sprite.rect)
  2339.  
  2340.         if not main_menu.showing and not starting_animation_playing and not fartman.load:
  2341.             for bg in loopable_bgs:
  2342.                 window.blit(bg.image, bg.rect)
  2343.             for enemy in enemy_sprites:
  2344.                 window.blit(enemy.image, enemy.rect)
  2345.                 for box in box_sprites:
  2346.                     if enemy.rect.left in range(box.rect.left-5, box.rect.right+5) or enemy.rect.right in range(box.rect.left-5, box.rect.right + 5):
  2347.                         if enemy.touching_floor:
  2348.                             try:
  2349.                                 if enemy.direction == 'left':
  2350.                                     enemy.direction == 'right'
  2351.                                 elif enemy.direction == 'right':
  2352.                                     enemy.direction == 'left'
  2353.                             except:
  2354.                                 pass
  2355.                 try:
  2356.                     if enemy.popout:
  2357.                         enemy.rect.x = enemy.b.rect.x + 5
  2358.                 except:
  2359.                     pass
  2360.                
  2361.             for floor in floors:
  2362.                 try:
  2363.                     floor.update()
  2364.                     window.blit(floor.image, floor.rect)
  2365.                 except:
  2366.                     print(floor)
  2367.                 try:
  2368.                     if floor.no_up:
  2369.                         fartman.jumping = False
  2370.                 except:
  2371.                     pass
  2372.             for powerup in powerup_sprites:
  2373.                 powerup.update()
  2374.                 window.blit(powerup.image, powerup.rect)
  2375.             for box in box_sprites:
  2376.                 box.update()
  2377.                 if box.no_left:
  2378.                     fartman.no_left = True
  2379.                 elif box.no_right:
  2380.                     fartman.no_right = True
  2381.                 if not box.broken or box.type == 'loot':
  2382.                     window.blit(box.image, box.rect)
  2383.             try:
  2384.                 for sprite in projectile_sprites:
  2385.                     sprite.update()
  2386.                     window.blit(sprite.image, sprite.rect)
  2387.             except:
  2388.                 pass
  2389.             try:
  2390.                 for sprite in poop_bird_throw_sprites:
  2391.                     sprite.throw()
  2392.                     window.blit(sprite.image,sprite.rect)
  2393.             except:
  2394.                 pass
  2395.            
  2396.             for sprite in all_sprites:
  2397.                 if sprite.type == 'end_pp':
  2398.                     sprite.update()
  2399.                     window.blit(sprite.image,sprite.rect)
  2400.             for sprite in edit_temp_sprites:
  2401.                 window.blit(sprite.image, sprite.rect)
  2402.             for box in box_sprites:
  2403.                 box.update()
  2404.                 if box.no_left:
  2405.                     fartman.no_left = True
  2406.                 elif box.no_right:
  2407.                     fartman.no_right = True
  2408.  
  2409.             for orb in rotating_orbs_sprites:
  2410.                 orb.update()
  2411.                 window.blit(orb.image, orb.rect)
  2412.                 window.blit(orb.b.image, orb.b.rect)
  2413.             for sprite in portapotty_sprites:
  2414.                 sprite.update()
  2415.             try:
  2416.                
  2417.                 for floor in floors:
  2418.                     floor.update()
  2419.                     if floor.is_popout_sword:
  2420.                         area_y = range(floor.rect.top, floor.rect.bottom)
  2421.                         for y in area_y:
  2422.                             if y in range(fartman.rect.top, fartman.rect.bottom - 5):
  2423.                                 if fartman.rect.right in range(floor.rect.left - 5, floor.rect.right + 5) or fartman.rect.left in range(floor.rect.left - 5, floor.rect.right + 5):
  2424.                                     if fartman.direction == 'left':
  2425.                                         floor.no_left = True
  2426.                                         floor.no_right = False
  2427.                                     else:
  2428.                                         floor.no_left = True
  2429.                                     if fartman.direction == 'right':
  2430.                                         floor.no_right = True
  2431.                                         floor.no_left = False
  2432.                                     else:
  2433.                                         floor.no_right = False
  2434.                                     if floor.no_left:
  2435.                                         fartman.no_left = True
  2436.                                         floor.no_left = True
  2437.                                         fartman.override_no_left = True
  2438.                                         fartman.override_no_right = False
  2439.                                         fartman.jump_time = 0
  2440.                                     elif box.no_right:
  2441.                                         fartman.override_no_right = True
  2442.                                         fartman.override_no_left = False
  2443.                                         fartman.no_right = True
  2444.                                         fartman.jump_time = 0
  2445.                                         floor.no_right = True
  2446.                                 else:
  2447.                                     floor.no_left = False
  2448.                                     floor.no_right = False
  2449.                             else:
  2450.                                 floor.no_left = False
  2451.                                 floor.no_right = False
  2452.                                        
  2453.                 if fartman.touching_floor:
  2454.                     fartman.jump_time = 0
  2455.             except:
  2456.                 pass
  2457.  
  2458.             for sprite in no_move_enemy_sprites:
  2459.                 sprite.update()
  2460.                 window.blit(sprite.image, sprite.rect)
  2461.            
  2462.             fartman.touching()
  2463.             fartman.movement()
  2464.             fartman.stomping_enemies()
  2465.             fartman.break_boxes()
  2466.             fartman.powerups()
  2467.             fartman.end_level()
  2468.             window.blit(fartman.image, fartman.rect)
  2469.             fartman.invisible_detection.rect.x, fartman.invisible_detection.rect.y = fartman.rect.x, fartman.rect.y - 5
  2470.             window.blit(fartman.invisible_detection.image,fartman.invisible_detection.rect)
  2471.             draw()
  2472.            
  2473.         if starting_animation_playing:
  2474.             timer = pygame.time.get_ticks()
  2475.             if shalack:
  2476.                 sa_timer = pygame.time.get_ticks()
  2477.                 shalack = False
  2478.            
  2479.             if timer - sa_timer <= 1500:
  2480.                 window.blit(grayscreen.image, grayscreen.rect)
  2481.             elif timer - sa_timer <= 3000:
  2482.                 window.blit(fartmen_presents.image, fartmen_presents.rect)
  2483.             elif timer - sa_timer <= 4500:
  2484.                 window.blit(fartmen_presents_fartman.image, fartmen_presents_fartman.rect)
  2485.             elif timer - sa_timer <= 24000:
  2486.                 fartman_animation.rect.top = 0
  2487.                 fartman_animation.rect.x += 2
  2488.                 window.blit(fartman_animation.image, fartman_animation.rect)
  2489.             elif timer - sa_timer >= 24000 and timer - sa_timer <= 42000:
  2490.                 fartman_animation.rect.top = -2500
  2491.                 fartman_animation.rect.x -= 2
  2492.                 window.blit(fartman_animation.image, fartman_animation.rect)
  2493.             elif timer - sa_timer >= 42000 and timer - sa_timer < 60000:
  2494.                 fartman_animation.rect.x += 2
  2495.                 fartman_animation.rect.top = -5000
  2496.                 window.blit(fartman_animation.image, fartman_animation.rect)
  2497.             elif timer - sa_timer >= 60000:
  2498.                 starting_animation_playing = False
  2499.                 fartman.load = True
  2500.                 fartman.level_1_load = True
  2501.  
  2502.         pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement