From: Simon Cross Date: Sat, 10 Sep 2016 21:04:06 +0000 (+0200) Subject: Merge branch 'master' of ctpug.org.za:tabakrolletjie X-Git-Tag: tabakrolletjie-v1.0.0~39 X-Git-Url: https://git.ctpug.org.za/?a=commitdiff_plain;h=21416241167027944a3a4b1a335418d4049e0179;hp=77b600b206ed9b4f02eacf39036b11e5f261eed1;p=tabakrolletjie.git Merge branch 'master' of ctpug.org.za:tabakrolletjie --- diff --git a/data/images/48/circle.png b/data/images/48/circle.png new file mode 100644 index 0000000..7ed598c Binary files /dev/null and b/data/images/48/circle.png differ diff --git a/data/images/48/square.png b/data/images/48/square.png new file mode 100644 index 0000000..38dba77 Binary files /dev/null and b/data/images/48/square.png differ diff --git a/data/images/Makefile b/data/images/Makefile index 3b92dcb..08ea9db 100644 --- a/data/images/Makefile +++ b/data/images/Makefile @@ -7,10 +7,11 @@ MOULD=eyeballA eyeballB eyeballC eyelid LIGHT=spotlight lamp laser LIGHT_MASK=light_mask_2_1 light_mask_2_2 light_mask_3_1 light_mask_3_2 light_mask_3_3 CONTROLS=night default_cursor exit pause play day +BLANKS=circle square IMG16=$(MOULD_BODY) IMG32=$(MOULD_BODY) $(MOULD) $(LIGHT) $(SEED) $(LIGHT_MASK) $(CONTROLS) -IMG48=$(LIGHT) $(TURNIP) $(LIGHT_MASK) +IMG48=$(LIGHT) $(TURNIP) $(LIGHT_MASK) $(BLANKS) IMG64=$(MOULD_BODY) CURSORS=$(SEED) $(LIGHT) diff --git a/sources/vector/circle.svg b/sources/vector/circle.svg new file mode 100644 index 0000000..19cabeb --- /dev/null +++ b/sources/vector/circle.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/sources/vector/square.svg b/sources/vector/square.svg new file mode 100644 index 0000000..88176f4 --- /dev/null +++ b/sources/vector/square.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/tabakrolletjie/scenes/day.py b/tabakrolletjie/scenes/day.py index e2d1e19..7f73ad2 100644 --- a/tabakrolletjie/scenes/day.py +++ b/tabakrolletjie/scenes/day.py @@ -53,6 +53,7 @@ class DayScene(BaseScene): self._draw_you_lose(gamestate) elif gamestate.harvested >= gamestate.turnip_target: self._draw_you_win(gamestate) + self._ending = False def _draw_you_lose(self, gamestate): overlay = pygame.surface.Surface( @@ -128,8 +129,11 @@ class DayScene(BaseScene): gamestate.turnips = turnip_data def end_day(self, gamestate): + if self._ending: + return self._battery.apply_recharge() gamestate.update_lights(self._lights) + self._ending = True from .night import NightScene SceneChangeEvent.post(scene=NightScene()) @@ -226,12 +230,16 @@ class DayScene(BaseScene): self._lights.add_light(cfg) def event(self, ev, gamestate): + if self._ending: + return if self._game_over_text: if ev.type in (pgl.KEYDOWN, pgl.MOUSEBUTTONDOWN): + self._ending = True from .menu import MenuScene SceneChangeEvent.post(scene=MenuScene()) if ev.type == pgl.KEYDOWN: if ev.key in (pgl.K_q, pgl.K_ESCAPE): + self._ending = True from .menu import MenuScene SceneChangeEvent.post(scene=MenuScene()) elif ev.key == pgl.K_e: @@ -251,6 +259,7 @@ class DayScene(BaseScene): elif tool.name == 'start night': self.end_day(gamestate) elif tool.name == 'exit': + self._ending = True from .menu import MenuScene SceneChangeEvent.post(scene=MenuScene()) else: diff --git a/tabakrolletjie/scenes/help.py b/tabakrolletjie/scenes/help.py index c58fea5..46c176d 100644 --- a/tabakrolletjie/scenes/help.py +++ b/tabakrolletjie/scenes/help.py @@ -61,17 +61,35 @@ class HelpScene(BaseScene): "This is a space turnip, the most valuable vegetable in the" " universe. A crucial ingredient of longevity serum, space" " navigator tonic and a pink sweet that everyone loves.")), - HelpItem(("64", "mouldA.png"), ( - "This is Boyd the space mould. He loves turnips. You've" - " disinfected your ship a thousand times, but somehow he shows" - " up on every planet at night to devour your crop. He is" - " vulnerable to light, but beware -- he builds up a resistance" - " if you overuse the same colour.")), + ] + + mould = HelpItem(("64", "mouldA.png"), ( + "This is Boyd the space mould. He loves turnips. You've" + " disinfected your ship a thousand times, but somehow he shows" + " up on every planet at night to devour your crop. He is" + " vulnerable to light, but beware -- he builds up a resistance" + " if you overuse the same colour.")) + + mould._img.blit( + loader.load_image("32", "mouldB.png").convert_alpha(), + (30, 30), None) + mould._img.blit( + loader.load_image("32", "eyeballA.png").convert_alpha(), + (10, 10), None) + mould._img.blit( + loader.load_image("32", "eyelid.png").convert_alpha(), + (10, 10), None) + + items.append(mould) + + items.extend([ HelpItem(("32", "seed.png"), ( "This is a turnip seed. You get a limited number of these at" " the start of a level. You can plant them, and you can use" " them to buy lights to protect your crop. Turnips which" - " survive to harvest yield more seeds.")), + " survive to harvest yield more seeds. Click on the icon that" + " looks like this to start planting seeds. It takes three nights" + " for a turnip to mature.")), HelpItem(("48", "lamp.png"), ( "This is a lamp. It comes in many colours, and has some other" " varying properties. It is powered by your farm's battery" @@ -95,18 +113,41 @@ class HelpScene(BaseScene): " skip to the next day. Or you can keep playing with your lights." " If you have no power left either, or you are completely" " bankrupt, the night will end automatically.")), - ] - - # Special mould assembly - items[1]._img.blit( - loader.load_image("32", "mouldB.png").convert_alpha(), - (30, 30), None) - items[1]._img.blit( - loader.load_image("32", "eyeballA.png").convert_alpha(), - (10, 10), None) - items[1]._img.blit( - loader.load_image("32", "eyelid.png").convert_alpha(), - (10, 10), None) + HelpItem(("32", "spotlight.png"), ( + "Click on a light icon like this to get a menu of colour options" + " available on your level.")), + HelpItem(("32", "spotlight.png"), ( + "Once you have selected a colour option, you will be able to" + " place the light."), + transform=Multiply(colour=COLOURS["magenta"])), + HelpItem(("32", "exit.png"), ( + "Click this icon to quit the level in disgust and return to the" + " menu.")), + ]) + + soil = HelpItem(("48", "square.png"), ( + "This is soil. You can plant seeds in it and position lights on" + " it. Lights and plants can't overlap with each other.")) + soil._img.blit( + loader.load_image("textures", "soil.png").convert_alpha(), + (0, 0), None, pgl.BLEND_RGBA_MULT) + items.append(soil) + + stone = HelpItem(("48", "square.png"), ( + "This is a stone wall. It gets in your way. On the other hand, it" + " also gets in Boyd's way.")) + stone._img.blit( + loader.load_image("textures", "stone.png").convert_alpha(), + (0, 0), None, pgl.BLEND_RGBA_MULT) + items.append(stone) + + shrub = HelpItem(("48", "circle.png"), ( + "This is a shrub. It works exactly like a wall, except that it's" + " round.")) + shrub._img.blit( + loader.load_image("textures", "shrub.png").convert_alpha(), + (0, 0), None, pgl.BLEND_RGBA_MULT) + items.append(shrub) return items @@ -124,7 +165,7 @@ class HelpScene(BaseScene): height += max( item._img_size, item.FONT.get_height() * len(item._text)) height += 5 - if height > SCREEN_SIZE[1]: + if height > SCREEN_SIZE[1] - 50: height = 50 x_offset = SCREEN_SIZE[0] / 2 diff --git a/tabakrolletjie/scenes/night.py b/tabakrolletjie/scenes/night.py index 9459c0e..7813e32 100644 --- a/tabakrolletjie/scenes/night.py +++ b/tabakrolletjie/scenes/night.py @@ -47,6 +47,7 @@ class NightScene(BaseScene): self._paused = False self._eaten_tonight = 0 self._night_over_text = [] + self._ending = False def create_tools(self, gamestate): tools = [] @@ -105,11 +106,14 @@ class NightScene(BaseScene): surface.blit(text, text_pos, None) def event(self, ev, gamestate): + if self._ending: + return if ev.type == pgl.KEYDOWN: if not self._do_ticks: # Any keypress exits self._to_day(gamestate) if ev.key in (pgl.K_q, pgl.K_ESCAPE): + self._ending = True from .menu import MenuScene SceneChangeEvent.post(scene=MenuScene()) elif ev.key == pgl.K_e and DEBUG: @@ -129,6 +133,7 @@ class NightScene(BaseScene): if tool.name == 'pause play': self.toggle_pause() elif tool.name == 'exit': + self._ending = True from .menu import MenuScene SceneChangeEvent.post(scene=MenuScene()) elif tool.name == 'day': @@ -143,7 +148,10 @@ class NightScene(BaseScene): def _to_day(self, gamestate): # End the night + if self._ending: + return gamestate.update_lights(self._lights) + self._ending = True from .day import DayScene SceneChangeEvent.post(scene=DayScene()) diff --git a/tabakrolletjie/utils.py b/tabakrolletjie/utils.py index 6f9e133..19364c2 100644 --- a/tabakrolletjie/utils.py +++ b/tabakrolletjie/utils.py @@ -6,6 +6,7 @@ import pygame.surface import pygame.locals as pgl import os import sys +import json from .constants import DEBUG from .loader import loader @@ -92,3 +93,12 @@ def get_save_file_name(): def save_file_exists(): savefile = get_save_file_name() return os.path.isfile(savefile) + + +def write_save_file(json_data): + save_dir = save_location() + if not os.path.exists(save_dir): + os.makedirs(save_dir) + savefile = get_save_file_name() + with open(savefile, 'wb') as f: + json.dump(json_data, f, indent=3)