made level 1 easier; added calendar event; started tracking kit HTML; changed README to markdown

This commit is contained in:
frank 2022-06-24 15:49:05 -04:00
parent e88c4b8937
commit 41b2620686
8 changed files with 239 additions and 561 deletions

53
NS.py
View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
#
# [SCRAPEBOARD] is an arcade game in development by [@diskmem] and [@snakesandrews]
# [SCRAPEBOARD] is an arcade game in development by [@diskmem] & [@snakesandrews]
#
# It requires custom hardware to play but can be tested in keyboard mode without the hardware.
# For more information on setting up and running the game, see the README, or for the game in
# general, visit https://scrape.nugget.fun/
# It requires custom hardware to play but can be tested in keyboard mode without
# the hardware. For more information on setting up and running the game, see the
# README, or for the game in general, visit https://scrape.nugget.fun/
#
import argparse, pathlib, operator
@ -36,16 +36,18 @@ from lib.pgfw.pgfw.Sprite import Sprite, RainbowSprite
from lib.pgfw.pgfw.Animation import Animation
from lib.pgfw.pgfw.Vector import Vector
from lib.pgfw.pgfw.extension import (
get_step, get_step_relative, get_delta, reflect_angle, get_distance, render_box, get_hsla_color, get_hue_shifted_surface,
get_color_swapped_surface, load_frames, fill_colorkey, get_segments, get_boxed_surface
get_step, get_step_relative, get_delta, reflect_angle, get_distance,
render_box, get_hsla_color, get_hue_shifted_surface,
get_color_swapped_surface, load_frames, fill_colorkey, get_segments,
get_boxed_surface
)
from lib.pgfw.pgfw.gfx_extension import aa_filled_polygon
class NS(Game, Animation):
"""
The main game object. It initializes and updates the title screen, boss manager, platform, dialog manager, screen wipe manager,
main character, and more (see the objects initialized in __init__). It initializes and watches the Arduino serial port and
listens for and responds to keyboard input.
The main game object. It initializes and updates the title screen, boss manager, platform, dialog manager, screen
wipe manager, main character, and more (see the objects initialized in __init__). It initializes and watches the
Arduino serial port and listens for and responds to keyboard input.
"""
# Class variables that can be used to represent each of the four game pads. The L stands for "light", and the directions
@ -137,10 +139,10 @@ class NS(Game, Animation):
def __init__(self):
"""
Parse the command line, set config types, initialize the serial reader, subscribe to events, and initialize child objects
Parse the command line, set config types, initialize the serial reader, subscribe to events, and initialize child objects.
"""
# Specify possible arguments and parse the command line. If the -h flag is passed, the argparse library will
# print a help message and end the program.
# Specify possible arguments and parse the command line. If the -h flag is passed, the argparse library will print a
# help message and end the program.
parser = argparse.ArgumentParser()
parser.add_argument("--minimize-load-time", action="store_true")
parser.add_argument("--serial-port")
@ -159,16 +161,24 @@ class NS(Game, Animation):
{
"time":
{
"int": ["timer-max-time", "timer-start-level-1", "timer-start-level-2", "timer-start-level-3", "timer-addition-level-1",
"timer-addition-level-2", "timer-addition-level-3", "sword-delay", "attract-gif-length", "attract-board-length",
"attract-reset-countdown", "level-select-reset-countdown", "level-select-press-length", "ending-timeout",
"lizard-hurt-length"],
"int": [
"timer-max-time", "timer-start-level-1", "timer-start-level-2", "timer-start-level-3",
"timer-addition-level-1", "timer-addition-level-2", "timer-addition-level-3", "sword-delay",
"attract-gif-length", "attract-board-length", "attract-reset-countdown", "level-select-reset-countdown",
"level-select-press-length", "ending-timeout", "lizard-hurt-length"
],
"float": "timer-warning-start"
},
"boss":
{
"float": ["damage-per-hit-level-1", "damage-per-hit-level-2", "damage-per-hit-level-3"],
"int": ["cooldown-level-1", "cooldown-level-2", "cooldown-level-3", "first-combo-delay"]
"float": [
"damage-per-hit-level-1", "damage-per-hit-level-2",
"damage-per-hit-level-3"
],
"int": [
"cooldown-level-1", "cooldown-level-2",
"cooldown-level-3", "first-combo-delay"
]
},
"input":
{
@ -213,8 +223,8 @@ class NS(Game, Animation):
for port in list_ports.comports():
print(f"Detected serial port: {port.device}")
exit()
# Open the port specified by the configuration or command line if it is found. If the specified port is not found,
# open the first found serial port. If no serial ports are found, raise an exception.
# Open the port specified by the configuration or command line if it is found. If the specified port is not
# found, open the first found serial port. If no serial ports are found, raise an exception.
requested_port = self.get_configuration("input", "arduino-port")
devices = [port.device for port in list_ports.comports()]
if requested_port in devices:
@ -251,7 +261,8 @@ class NS(Game, Animation):
self.play(self.blink_score)
self.reset()
self.most_recent_score = None
self.pop_up_font = pygame.font.Font(self.get_resource(Dialogue.FONT_PATH), 12)
self.pop_up_font = pygame.font.Font(
self.get_resource(Dialogue.FONT_PATH), 12)
self.pop_up_text = ""
# Start the score list with all blank scores
self.scores = []

View File

@ -8,8 +8,7 @@ This repository can be used to run either the full arcade version or the keyboar
# REQUIREMENTS #
################
The game requires Python and Pygame. The Python version used for development is Python 3.9. The Pygame version
is 1.9.6.
The game requires Python and Pygame. The Python version used for development is Python 3.9. The Pygame version is 1.9.6.
To install python with pip:
@ -23,23 +22,19 @@ or
./OPEN-GAME --no-serial
to start the game in either full arcade mode or keyboard only mode. See below for more about serial input and
keyboard input modes.
to start the game in either full arcade mode or keyboard only mode. See below for more about serial input and keyboard input modes.
##########
# SERIAL #
##########
To run the game using the custom skateboard and dance pads, the Arduino attached to the pads must be plugged
into USB, and the pyserial package must be installed on this computer (https://pypi.org/project/pyserial/)
To run the game using the custom skateboard and dance pads, the Arduino attached to the pads must be plugged into USB, and the pyserial package must be installed on this computer (https://pypi.org/project/pyserial/)
If you have Python Package Installer, you can run this to install pyserial:
pip install pyserial
The Arduino must be loaded with the program at serial/serial2/serial2.ino and connected to USB. The game
will try to detect the Arduino, but to specify a specific port you can use the config file or command
line.
The Arduino must be loaded with the program at serial/serial2/serial2.ino and connected to USB. The game will try to detect the Arduino, but to specify a specific port you can use the config file or command line.
If you don't have the board, pad and Arduino, you can test the game using keyboard-only mode.
@ -69,10 +64,8 @@ The A key force resets the connected Arduino (or does nothing if no Arduino is c
# OPTIONS #
###########
The full list of configurable values is in the file called `config`. There are also command line flags that
can override config values:
The full list of configurable values is in the file called `config`. There are also command line flags that can override config values:
./OPEN-GAME -h
The --minimize-load-time flag can be useful when testing because it sacrifices some effects to load the game
quickly.
The --minimize-load-time flag can be useful when testing because it sacrifices some effects to load the game quickly.

6
config
View File

@ -36,7 +36,7 @@ lives-boss-rush-mode = 3
lives-level-select-mode = 1
[boss]
damage-per-hit-level-1 = 4.0
damage-per-hit-level-1 = 6.0
damage-per-hit-level-2 = 2.5
damage-per-hit-level-3 = 1.75
cooldown-level-1 = 2500
@ -63,10 +63,10 @@ serial = True
[time]
timer-max-time = 10000
timer-start-level-1 = 8000
timer-start-level-1 = 9000
timer-start-level-2 = 7000
timer-start-level-3 = 6000
timer-addition-level-1 = 1000
timer-addition-level-1 = 1100
timer-addition-level-2 = 700
timer-addition-level-3 = 700
timer-warning-start = 0.4

View File

@ -1,513 +1,51 @@
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10202 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10317 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10403 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10411 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10417 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
10434 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
16483 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
21640 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
24404 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
33896 0
52833 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
59424 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
64471 0
67571 0
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10329 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
10718 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
18586 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
21561 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
33442 1
64453 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
68561 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
71763 1
82974 1
92810 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
95630 1
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
9474 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10286 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10433 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
10589 2
66418 2
69843 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
73798 2
74841 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
75161 2
80087 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
86762 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
96171 2
44857 0
49055 0
50925 0
52244 0
52476 0
52697 0
53843 0
54228 0
55784 0
56431 0
56841 0
57276 0
59877 0
59924 0
60226 0
60533 0
60592 0
60840 0
61002 0
61161 0
61886 0
62177 0
64400 0
66059 0
67432 0
68558 0
70106 0
70215 0
72014 0
73576 0
73582 0
73707 0
74811 0
76033 0
76297 0
77707 0
79626 0
73625 1
92223 1
100944 1
104210 1
107313 1
108885 1
112707 1
114058 1
118589 1
124901 1
78910 2
82296 2
82801 2
97958 2

View File

@ -1,4 +1,4 @@
// by Dr. Clement Shimizu for Scrapeboard
// constants won't change:
const long interval = 25; // 25 ms * 6 tests * 2 = 200 ms means 5 loops per second

View File

@ -24,10 +24,10 @@
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="description" content="Scrapeboard is a new kind of arcade game played on a skateboard deck and four pads that combines elements of rhythm, racing, and fighting games to create a unique, challenging, and physically demanding boss rush experience." />
<meta name="keywords" content="arcade, arcade games, diy arcade cabinets, alt ctrl, alternative controllers, video games, indie game, indie games, indie dev, gamedev, game dev, game programming">
<meta property="og:url" content="http://scrape.nugget.fun">
<meta property="og:url" content="https://scrape.nugget.fun">
<meta property="og:title" content="Scrapeboard">
<meta property="og:description" content="Scrapeboard is a new kind of arcade game played on a skateboard deck and four pads that combines elements of rhythm, racing, and fighting games to create a unique, challenging, and physically demanding boss rush experience.">
<meta property="og:image" content="http://scrape.nugget.fun/www/open_graph_card.jpg">
<meta property="og:image" content="https://scrape.nugget.fun/www/open_graph_card.jpg">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@diskmem">
@ -365,10 +365,53 @@
</p>
<div id="calendar">
<p>
Come play Scrapeboard at one of these events!
Check out Scrapeboard at an upcoming event!
</p>
<div class="date upcoming current">
<div class="date current">
<div class="day-of-week">
Sun
</div>
<div class="day">
Jul. 10
</div>
<div class="year">
2022
</div>
<div class="location">
<a href="https://wonderville.nyc">Wonderville, NYC</a>
</div>
</div>
<div class="date past">
<div class="day-of-week">
Fri
</div>
<div class="day">
Jun. 10
</div>
<div class="year">
2022
</div>
<div class="location">
<a href="https://www.eventbrite.com/e/the-12th-annual-interactive-show-cursed-technology-shop-masksvax-req-tickets-331933611367">NYC Resistor</a>
</div>
</div>
<div class="date past">
<div class="day-of-week">
Sat
</div>
<div class="day">
May 28
</div>
<div class="year">
2022
</div>
<div class="location">
<a href="https://ra.co/events/1534719">Wonderville, NYC</a>
</div>
</div>
<div class="date past">
<div class="day-of-week">
Wed - Fri
</div>
@ -404,21 +447,26 @@
Oct. 31
</div>
<div class="year">
2021
2020
</div>
<div class="location">
<a href="https://wonderville.nyc">Wonderville, NYC</a>
</div>
</div>
<!--
<p>
<i>If you are interested in having Scrapeboard at your event, bar, arcade, office, school, or home,
contact <a href="mailto:scrape@nugget.fun">scrape@nugget.fun</a></i>
</p>
-->
</div>
<!--
<div id="mailing-list-join">
<span style="background: #ffa; border-radius: 5px; padding-left: 10px; padding-right: 10px;">
Join the Scrapeboard events and news mailing list!
Join the mailing list!
</div>
</div>
@ -429,6 +477,7 @@
&nbsp;
<input style="cursor: pointer; background: #4f8; font-weight: bold" type="submit" name="email-button" value="Join">
</form>
-->
<p class="emotes">
d(⌒ー⌒) (❁´◡`❁) ヽ(^Д^)ノ (。>‿‿<。 (*´∇`)ノ (●⌒v⌒●) ´・ᴗ・` (✿^-^) ヾ(^ヮ^)
@ -441,7 +490,7 @@
</div>
<div id="comedy_credits">
video by <a href="http://twitter.com/beachethan">@beachethan</a>
video by <a href="https://twitter.com/beachethan">@beachethan</a>
</div>
<style>

85
www/kit.html Normal file
View File

@ -0,0 +1,85 @@
<html>
<head>
<title>Scrapeboard Kits Mockup</title>
<style>
@import url("../../../lib/fonts/numans/regular/style.css");
body
{
margin: 40px 25%;
font-family: numansregular;
color: #000;
background-color: #fff;
font-size: 18px;
text-align: justify;
line-height: 32px;
}
button
{
display: block;
padding: 5px 100px;
font-size: 28px;
font-weight: bold;
margin-bottom: 25px;
cursor: pointer;
}
span.cents
{
font-size: 75%;
display: none;
}
</style>
</head>
<body>
<h1>Scrapeboard Kits</h1>
<hr/>
<h4>
Kits are a way to play Scrapeboard at home or anywhere you want to set it up. Connect one to the internet and take over the leaderboards. Download and upload custom levels and replays of your best runs. Exercise and learn a skill in the most fun way possible. Gather with others to throw a competitive or casual community gaming night. Make and play your own game that uses the skateboard and platform. It's possible to do all this and more with a Scrapeboard kit, on any budget.
</h4>
<hr/>
<h2>Hawk</h2>
<h3>Includes everything needed, no assembly required</h3>
<p>
At the highest tier is the Hawk model, built to be as close to playable out of the box as possible. Scrapeboard is an open source project, but we treat the kits at this tier like a proprietary product and include some cool modifications that aren't part of an ordinary Scrapeboard build. A pre-assembled platform made of stained wood and attached steel plates that splits into four pieces is included. The platform comes connected to a modified Raspberry Pi that boots into Scrapeboard when plugged into a TV or projector using an HDMI cable. The skateboard controller also comes fully assembled with grip tape, metal pads, and a custom Scrapeboard design painted on the bottom. Around the edge of the platform are LEDs that react to the gameplay.
</p>
<button>$699<span class="cents">.99</span></button>
<hr/>
<h2>Hawk Lite</h2>
<h3>Hawk model without the extras, requires some screwdriver assembly</h3>
<p>
For those that want a kit with everything necessary to play Scrapeboard and don't need the extras or plan to modify the platform or skatedeck on their own, there is the Hawk Lite tier. This kit comes with all the equipment necessary to connect to a TV or projector with an HDMI cable and play Scrapeboard after a small bit of screwdriver assembly. The wood and metal come unattached but with pre-drilled holes, screws and easy to follow instructions. The modified Raspberry Pi containing the Scrapeboard software and electronics can be easily attached to the metal pads using the included wires. The skatedeck comes as bare wood with truck holes for attaching the included metal pads. Everything can easily be assembled with a screwdriver.
</p>
<button>$299<span class="cents">.99</span></button>
<hr/>
<h2>900&deg;</h2>
<h3>Software and electronics bundle for D.I.Y. fabricators</h3>
<p>
The 900&deg; tier is great for D.I.Y. builds because it contains all the electronics and leaves out everything that can be sourced from a hardware store or your own supplies. If you're interested in building a platform yourself and want to use your own skatedeck, this kit contains the electronics, software, and metal skatedeck attachment needed to connect your platform and play Scrapeboard. The software and electronics come in the form of a modified Raspberry Pi with four leads to connect to your custom platform or any type of alternative controller you want to build to control Scrapeboard. The modified Raspberry Pi can be connected to the internet where you can fight for control of the leaderboards and download or upload custom levels and replays.
</p>
<button>$129<span class="cents">.99</span></button>
<hr/>
<h2>Lizard</h2>
<h3>The Scrapeboard metal skatedeck attachment</h3>
<p>
If you are considering building Scrapeboard entirely, there is one part you may want to considering sourcing from the kits. This tier contains the metal skatedeck attachment needed to connect the skatedeck with the platform. This is the component of Scrapeboard that has traditionally been most difficult to build. The metal is attached to a curved, fast moving thing constantly scraping against metal and wood and supporting the weight of a human body. It may be the case that everything besides this part is easy for you to build, in which case it may be of benefit to grab a metal skatedeck attachment custom built for Scrapeboard.
</p>
<button>$49<span class="cents">.99</span></button>
<hr/>
<h2>Scrape</h2>
<h3>Open source hardware and software D.I.Y.</h3>
<p>
This is the free tier where scrape takes on new meaning. Scrapeboard is an open source project and anyone is welcome to download, share, modify, and even sell the software and schematics! Download Scrapeboard, put some aluminum foil on the floor or table, put some aluminum foil on a piece of cardboard, and try it out using your own Makey Makey or Arduino. Scrape your brain for ideas and solutions and you'll be able to build your own Scrapeboard before you know it.
</p>
<hr/>
<h2>Kool Man</h2>
<h3>Rent Scrapeboard for a day</h3>
<p>
Do you want to be the Kool Man for a day? Maybe it's your birthday, or your kid's birthday, or maybe you're a kid and it's your birthday. Or it's nobody's birthday, and if you need it to be someone's birthday, it can be our birthday. Whatever the case, if you're hosting an event you would like to have Scrapeboard at, we'll bring Scrapeboard to your venue, set it up, supervise it, and tear it down, like bouncy castle operators.
</p>
<hr/>
<h2>Activision</h2>
<h3>Place Scrapeboard in an arcade</h3>
<p>
This is a premium tier for business owners who want to be able to use Scrapeboard like a traditional arcade machine and earn money each time someone plays. It comes with a full Hawk kit customized to require a credit card, Venmo, or PayPal payment each play. The amount required is set by the owner, as is the number of tries per play. A device attached to the Raspberry Pi accepts credit card payments, and an on-screen QR accepts Venmo or PayPal through the player's smart phone. It is configured to easily connect with the owner's PayPal account.
</p>
</body>
</html>

View File

@ -128,13 +128,14 @@ div#calendar
width: 100%;
background: #fff;
display: grid;
grid-gap: 10px;
}
div#calendar p
{
text-align: center;
width: 65%;
font-family: Cantarell;
font-family: CantarellBold;
margin: 30px auto;
}
@ -187,8 +188,9 @@ div#calendar div.date div.location
div#mailing-list-join
{
font-size: 34px;
font-family: Cantarell;
font-family: CantarellBold;
margin: 0px;
padding-top: 30px;
background: #fff;
text-align: center;
}
@ -211,7 +213,7 @@ form#mailing-list input
p#credits-heading
{
margin-top: 40px;
font-family: Cantarell;
font-family: CantarellBold;
font-size: 34px;
font-weight: bold;
text-align: center;