aboutsummaryrefslogtreecommitdiff
path: root/game2.moon
diff options
context:
space:
mode:
Diffstat (limited to 'game2.moon')
-rwxr-xr-xgame2.moon317
1 files changed, 0 insertions, 317 deletions
diff --git a/game2.moon b/game2.moon
deleted file mode 100755
index 4227faa..0000000
--- a/game2.moon
+++ /dev/null
@@ -1,317 +0,0 @@
-#!/usr/bin/env moon
-Game = require 'nomic2'
-core_game = require 'core2'
-
-game = Game(core_game)
-
-game\def "# $key $relation = $value", (args)=>
- --print "Setting #{args.key} #{args.relation} = #{args.value}"
- @relations[args.relation][args.key] = args.value
- return args.value
-
-game\def "set all * $relation = $value", (args)=>
- rels = @relations[args.relation]
- for k,_ in pairs rels
- rels[k] = args.value
- if next(rels) == nil
- @relations[args.relation] = nil
- return args.value
-
-game\def "$key $relation ?", (args)=>
- return @relations[args.relation][args.key]
-
-deep_pairs = (t)->
- coroutine.wrap ->
- for k,v in pairs(t)
- coroutine.yield k, v
- mt = getmetatable(t)
- return unless mt and mt.__index and type(mt.__index) == 'table' and mt.__index != t
- for k,v in deep_pairs mt.__index
- if t[k] == nil
- coroutine.yield k,v
-
-game\def "* $relation = $value", (args)=>
- --print "Finding all * #{args.relation} = #{args.value}"
- [key for key, value in deep_pairs(@relations[args.relation]) when value == args.value]
-
-game\def {"restrict $actions to $whitelist"}, (args)=>
- with args
- actions = @canonicalize(if type(.actions) == 'table' then .actions else {.actions})
- whitelist = @all_aliases(if type(.whitelist) == 'table' then .whitelist else {.whitelist})
- @\set_whitelist actions, whitelist
- for action in *actions
- print("Restricting #{Game.repr(action)} to #{Game.repr(whitelist)}")
-
-game\def {"permit $whitelist to $actions"}, (args)=>
- with args
- actions = @canonicalize(if type(.actions) == 'table' then .actions else {.actions})
- whitelist = @all_aliases(if type(.whitelist) == 'table' then .whitelist else {.whitelist})
- for action in *actions
- if not @authorized[action]
- print "#{action} is already available to everyone."
- continue
- print("Permitting #{Game.repr(action)} to #{Game.repr(whitelist)}")
- for w in *whitelist
- @authorized[action][w] = true
-
-game\def {"revoke $actions rights from $whitelist"}, (args)=>
- with args
- actions = @canonicalize(if type(.actions) == 'table' then .actions else {.actions})
- whitelist = @all_aliases(if type(.whitelist) == 'table' then .whitelist else {.whitelist})
- for action in *actions
- if not @authorized[action]
- print "#{action} is available to everyone, it can't be restricted."
- continue
- print("Revoking the right of #{Game.repr(action)} to use #{Game.repr(whitelist)}")
- for w in *whitelist
- @authorized[action][w] = nil
-
-game\def "print callstack", (args)=>
- print("Callstack:")
- for fn in *@callstack
- print fn
-
-game\def {"do $action"}, (args)=>
- (args.action)(@, {})
-
-game\def {"make $who $action"}, (args)=>
- with args
- old_you = @you
- print("Setting you=#{.who}")
- rawset(@, "you", .who)
- (.action)(@, {})
- rawset(@, "you", old_you)
-
-game\def "you", (args)=> @you
-
-game\run[=[
-say "===================================================="
-say " NEW GAME"
-say "===================================================="
-"everyone approves $action" := {yes}
-
-"sudo $action" := {
- if (everyone approves $action) {
- do $action
- } else {
- say "You do not have the will of the people! >:("
- }
-}
-restrict "$ := $" to "sudo $"
-restrict "make $ $" to "sudo $"
-restrict "set all * $ = $" to "sudo $"
-restrict "# $ $ = $" to "sudo $"
-restrict "restrict $ to $" to "sudo $"
-
-sudo {
- "propose $action" := {
- if ("pending proposal" "is" ?) {
- say "Sorry, an action is already pending."
- } else {
- say "Proposing..."
- # "pending proposal" "is" = $action
- }
- }
- "unpropose" := {
- let "pending" = ("pending proposal" "is" ?)
- set all * $pending = (nil)
- # "pending proposal" "is" = (nil)
- }
-
-
- "mark $who as approving $action" := {
- # $who $action = "approved"
- }
-
- "mark $who as rejecting $action" := {
- # $who $action = "rejected"
- }
-
- ["approve", "vote yes", "vote yea"] := {
- let "pending" = ("pending proposal" "is" ?)
- mark (you) as approving $pending
- say "Voted yes."
- if (everyone approves $pending) {
- sudo $pending
- unpropose
- }
- }
-
- ["reject", "vote no", "vote nay", "veto", "disapprove"] := {
- let "pending" = ("pending proposal" "is" ?)
- mark (you) as rejecting $pending
- say "Voted no."
- unpropose
- }
-
- ["players", "everyone", "everybody", "all players"] := {
- * "is a player" = (yes)
- }
-
- "join" := {
- # (you) "is a player" = (yes)
- printf ["Welcome to the game, ",(you),"!"]
- }
- permit "unpropose" to "set all * $ = $"
- permit ["join", "mark $ as approving $", "mark $ as rejecting $", "propose $", "unpropose"] to "# $ $ = $"
- restrict "unpropose" to ["approve", "reject"]
- restrict "mark $ as approving $" to ["propose $", "approve"]
- restrict "mark $ as rejecting $" to ["propose $", "reject"]
-
- "everyone approves $action" := {
- (# (players)) == (# (* $action = "approved"))
- }
-}
-
-join
-
-propose {
- say "fart"
-}
-approve
-
-
-"cheat" := {
- say "CHEATER!!!"
-}
-sudo {
- say "CHEATER!!!"
-}
-
-propose {
- # "democracy" "is possible" = (yes)
- if ("democracy" "is possible" ?) {
- say "DEMOCRACY WORKS!!!"
- }
-}
-approve
-
-propose {
- "fart" := {
- say "poot"
- }
-}
-approve
-fart
-
-propose {
- "open election $candidates" := {
- if ("candidates" "are" ?) {
- say "An election is already in progress."
- } else {
- # "candidates" "are" = $candidates
- }
- }
-
- "close election" := {
- let "pending" = ("pending proposal" "is" ?)
- set all * "votes for" = (nil)
- # "candidates" "are" = (nil)
- }
-
- "vote for $candidate" := {
- # (you) "votes for" = $candidate
- let "vote-percent" = ((# (* "votes for" = $candidate)) / (# (players)))
- printf ["Vote cast. ",$candidate," now has ",(100 * $vote-percent),"% of the votes."]
- if ($vote-percent > 0.5) {
- printf ["The winner of the election is:", $candidate]
- close election
- }
- }
-
- permit ["open election $", "close election", "vote for $"] to ["# $ $ = $"]
- permit ["close election"] to ["set all * $ = $"]
-}
-approve
-
-propose {
- "as bill: $action" := {
- if ((you) == "Anonymous") {
- make "bill" $action
- } else {
- printf ["Who do you think you are?", (you)]
- }
- }
- permit ["as bill: $"] to ["make $ $"]
-}
-approve
-as bill: {join}
-
-propose {
- "as dave: $action" := {
- if ((you) == "Anonymous") {
- make "dave" $action
- } else {
- printf ["Who do you think you are?", (you)]
- }
- }
- permit ["as dave: $"] to ["make $ $"]
-}
-approve
-as bill: {approve}
-as dave: {join}
-
-open election ["tom", "dick", "harry"]
-vote for "dick"
-as bill: {vote for "dick"}
-
-propose {
- "take a shit" := {say "shit taken."}
-}
-approve
-as bill: {approve}
-as dave: {approve}
-
-
-
-sudo {
- "everyone approves" := {
- (# (players)) == (# (* "votes" (yes)))
- }
- ["approve", "vote yes", "vote yea"] := {
- # (you) "votes" = (yes)
- if (everyone approves) {
- do pending action
- }
- }
- ["disapprove", "vote no", "vote nay", "veto"] := {
- say "The proposal has failed."
- # (you) "approves" = (yes)
- if (everyone approves) {
- do pending action
- }
- }
-}
-
-sudo {
- "everyone approves" := {
- say "Going into this code"
- no
- }
-}
-sudo {
- say "BROKEN"
-}
-
-
-propose {
- "arbitrarily define $signature := $body" := {
- if ($signature == "butts") {
- $signature := $body
- } else {
- say "Not my style."
- }
- }
- permit "arbitrarily define $ := $" to "$ := $"
- say "Arbitrary is a go."
-}
-as bill: {approve}
-as dave: {approve}
-approve
-arbitrarily define "butts" := {say "BUTTS"}
-butts
-
-arbitrarily define "ass" := {say "ASS"}
-ass
-
-]=]