RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[XP] Quest Log System

0 Members and 2 Guests are viewing this topic.

**
Rep:
Level 82
Eternally bloody...
Go to line 24 and replace "Save" with whatever you'd like the name on the list to be (just remember to put " around it)

Then replace line 150 through 160 with the following:

when 4  # save
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Quest.new

 Here's the default menu with the changes and including the save disabled part taken out (basically the things above)

Spoiler for:
Code: [Select]
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Make command window
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Status"
    s5 = "Quest Log"
    s6 = "End Game"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    # If number of party members is 0
    if $game_party.actors.size == 0
      # Disable items, skills, equipment, and status
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # If save is forbidden
    if $game_system.save_disabled
      # Disable save
      @command_window.disable_item(4)
    end
    # Make play time window
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    # Make steps window
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    # Make status window
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    # If command window is active: call update_command
    if @command_window.active
      update_command
      return
    end
    # If status window is active: call update_status
    if @status_window.active
      update_status
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # If command other than save or end game, and party members = 0
      if $game_party.actors.size == 0 and @command_window.index < 4
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Branch by command window cursor position
      case @command_window.index
      when 0  # item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # save
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Quest.new
      when 5  # end game
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  def update_status
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Make command window active
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case @command_window.index
      when 1  # skill
        # If this actor's action limit is 2 or more
        if $game_party.actors[@status_window.index].restriction >= 2
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to skill screen
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to equipment screen
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to status screen
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end
end

***
Rep:
Level 84
Yes, hoh my gawd!
updated, this is a lot more compatible now with more scripts

**
Rep:
Level 86
'Ello.  I was asked to take a look at this and I found a problem.

You see, if you access the Scene_Quest routine before you add any quests (like in your demo), you run into an error that will make the system crash.  You see, when you don't have any loaded quests, the routine tries to pass an empty array of quests into Window_Command.  Without commands, the system crashes.

You could add a default 'No Quests' command to the list of your quests if the quest array is empty, and make sure hitting the no quest option takes you out of the routine or something.

 :zwink: -DerVV
Up is down, left is right, and sideways is straight ahead. - Cord (Circle of Iron)

Round Robin
Downloadable PDF in link.

**
Rep:
Level 82
The crazy, scissors-wielding demoness
Great script game guy, but I was just wondering, is it possible to remove quests from the quest log?  ??? Or did I just miss that entirely in your excellent description?

Thanks,
-Meiko
Game in the works:
The Adventures of the Generic Hero(ine)
Gameplay: 20%
Mapping: 10%
Characters: 80%
Events: 30%
Ways to Die: 30%
Cliches: 65/192
?? ??
PROFIT!

***
Rep:
Level 84
Yes, hoh my gawd!
Quest.take(id)

***
Rep:
Level 84
---> LOL <---
I always seem to find some incompatibility with your scripts compared to mind....

anyways:

This is caused when using: $scene = Scene_Quest.new

Main Script I am using is the Spanish to English translation of FF12's battle system

****
Rep:
Level 83
Well i know that this script will crash if there are no quests in the Quest menu.
Spoiler for:
METALFRESH is a paint contractor that specializes in refinishing metal and vinyl siding. We paint metal buildings as well as siding on homes.

We also

    Refinish decks
    Do custom interior painting
    Strip wallpaper
    Refinish cedar siding
    Metal front doors and sidelights
    Metal garage and service doors
    Grained fiberglass doors

    If your structure is *RUSTED *FADED *CHALKING *IN NEED OF COLOR CHANGE, we can fix it with a guarentee!

northern Illinois and southern Wisconsin.

http://metalfreshcoatings.com


***
Rep:
Level 84
Yes, hoh my gawd!
sorry I just don't have the time to fix that small mistake.

But do know this, I plan on re-making the quest system (3rd time now) that way you will get no errors at all and it'll look much nicer.

****
Rep:
Level 83
well you don't have to rebuild each time, you can just improve on what you have, which this second build is better then your first I must say.

i fixed it by adding this to line 188 "@quests = [""] if @quests == []"
Spoiler for:
METALFRESH is a paint contractor that specializes in refinishing metal and vinyl siding. We paint metal buildings as well as siding on homes.

We also

    Refinish decks
    Do custom interior painting
    Strip wallpaper
    Refinish cedar siding
    Metal front doors and sidelights
    Metal garage and service doors
    Grained fiberglass doors

    If your structure is *RUSTED *FADED *CHALKING *IN NEED OF COLOR CHANGE, we can fix it with a guarentee!

northern Illinois and southern Wisconsin.

http://metalfreshcoatings.com


***
Rep:
Level 84
Yes, hoh my gawd!
I know, I'm just not happy with the design.

****
Rep:
Level 83
I like it, but if you have visions of something better, then I can't wait to see it.
Spoiler for:
METALFRESH is a paint contractor that specializes in refinishing metal and vinyl siding. We paint metal buildings as well as siding on homes.

We also

    Refinish decks
    Do custom interior painting
    Strip wallpaper
    Refinish cedar siding
    Metal front doors and sidelights
    Metal garage and service doors
    Grained fiberglass doors

    If your structure is *RUSTED *FADED *CHALKING *IN NEED OF COLOR CHANGE, we can fix it with a guarentee!

northern Illinois and southern Wisconsin.

http://metalfreshcoatings.com


**
Rep: +0/-0Level 78
RMRK Junior
Hello game_guy.
I really love your script, its very easy to use and usefull, but i have one question:
How can i sort list of quests by process of quest?
I mean: uncompleted quests will be at the top, completed in bottom.
Sorry for my bad english.
BTW: i have remaked your script that i have there: in progress, completed, failed (red font) so i want to sort them (quests) in that queue:
In progress
Completed
Failed
THX for reply and THX for this really extremely nice script.

***
Rep:
Level 84
Yes, hoh my gawd!
Well when I get to remaking it I might add that feature. I really haven't done much in RMXP lately but I'll see if I can get back into it.

**
Rep: +0/-0Level 78
RMRK Junior
Well, I'm looking forward to it. I hope you will update your script soon, because you are making the best scripts. Like item storage, very useful. Thx a lot  :lol:

**
Rep: +0/-0Level 78
RMRK Junior
Great job on this Game_Guy! This is my favorite quest log script. There's others that have more features, but the missions aren't as easy to set up. Yours is so easy to customize. I also added in support for the mission arrows script so that when you select a mission in the quest log, it will show direction arrows to help you find the mission location as long as the location name is the same as the current map name. So far it seems to work really well. Thanks for the great work :D

***
Rep:
Level 84
Yes, hoh my gawd!
Haha thanks! I'm remaking it and missions are going to have parts.
Get the Apples
Part 1: Collect 5 Apples
Part 2: Return them to Ms. Biggy

**
Rep: +0/-0Level 78
RMRK Junior
Wow  :D That will be nice, but one thing, keep it simple, thats why lot of people <3 your script.

***
Rep:
Level 84
Yes, hoh my gawd!
Okay I lost my main computer. Little brother poured soda all over the tower while I was hanging with some friends. So much for mom watching him >__>

Anyways I've gotta restart on all my progress I made. Heres what I plan to add:
  • Objectives - 1st: get 5 apples, 2nd: Eat them
  • Sorting option - Sort by 3 options, (Completed, failed, in progress), (failed, completed, in progress), (in progress, completed, failed)
  • Quest name colors - example: green completed, red failed, white in progress
  • This may not happen, I might make a config app for my quest script. Depending on how difficult it will be to configure things.
Thats all I can remember for now. Look for the update =)

**
Rep: +0/-0Level 77
RMRK Junior
man game_guy I love you script I been trying to make one my own but have no idea what i am doing :D i cant wait until the new verison comes out cause of the end game thing but lets have some fun

**
Rep:
Level 75
Moose Warrior of the Moose Brigade
I love your script and it's been working for me for the most while, but now that I got to 4 and 5 quests it won't work.
I keep getting an error "Script 'Quest Log' line 263: SyntaxError occurred." It won't let me go to the title screen but if i take out just the quest descriptions i can get to the title screen. Can anybody help.

thats line 262 and 263
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 480, 32, "Quest:")

and thats the descriptions
    when 1 then return "Go North of Alae Forest and gain entrance to Mount Alae (Ryan is required for this quest)."
    when 2 then return "Go back to the Underground Sanctum and tell the rest what happened."
    when 3 then return "Go to Mine Town find some Tobacco to make smokes for Ben, Shawn, and Girv so you can play as them again."
    when 4 then return "Go to the Glacier River and find the Ice Sword (Ben is required for this quest)."
    when 5 then return "Go to the Desert Of Alae and find the Lightning Sword (Dustin is required for this quest).
    end
    return ""

i'm not good with scripting if someone can help me that would be great.
If at first you don't succeed, keep on sucking until you do succeed

**
Rep:
Level 75
Moose Warrior of the Moose Brigade
never mind im an idiot, i found the problem i was missing a "
If at first you don't succeed, keep on sucking until you do succeed

****
Sperm Donor Extraordinaire
Rep:
Level 77
Bronze - GIAW 9
ALRIGHT so I know this is a TERRIBLE necro post but I have added functionality to this to make it more available for those who have or wish to add this script to their Scene_Menu.  First, I will describe how to use it.

in your scene menu, in the update_command section (where you added the functionality for it to go to the quest log and made it play the sound effect), you will make it look like this (replacing the "3" with whatever case it is in your script):

Code: [Select]
        when 3  # Quest Log
           # Play decision SE
           if $game_party.quests_avail == false
           $game_system.se_play($data_system.buzzer_se)
           return
        end
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Quest.new

That is only step one.  You will want to also grey-out your Quest Log option(more than likely, unless you are a trickster and like to prank the people who play your game into thinking its broken...).  Do so like this (again, replacing "3" with whatever case it is in your script):

Code: [Select]
if $game_party.quests_avail == false
   #disable quest log
   @command_window.disable_item(3)
end

Now, your menu is finished.  Now you need to update your quest log script.  Here is the quest log script as I have it now (any updates to this quest log made after the version I grabbed will not be available with this functionality unless it was already added and I was not privy to such information).

Code: [Select]
#===============================================================================
# Quest Log System
# Author game_guy
# Updated by Lethrface
# Version 3.1
# Date: 1-28-2012
#-------------------------------------------------------------------------------
# Intro:
# A script that keeps track of quests you obtain and complete.
#
# Features:
# Marks quest names with a yellow color if they're completed
# Easy to setup one quest
# Be able to use a fairly long description
# Be able to display a picture
# Easy to add and complete a quest
# More compatible than earlier versions
# *NEW!!!* Able to call a check to see if the Quest log has any quests available
#
# Instructions:
# Scroll down a bit until you see # Being Config. Follow the instructions there.
# Scroll below that and you'll see Begin Quest Setup. Follow the steps there.
#
# Script Calls:
# Quest.add(id) ~ Adds the quest(id) to the parties quests.
# Quest.take(id) ~ Takes the quest(id) from the party.
# Quest.complete(id) ~ Makes the quest(id) completed.
# Quest.completed?(id) ~ Returns true if the quest(id) is completed.
# Quest.has?(id) ~ Returns true if the party has quest(id).
# $scene = Scene_Quest.new ~ Opens the quest menu.
#
# Credits:
# game_guy ~ for making it
# Beta Testers ~ Sally and Landith
# Blizzard ~ Small piece of code I borrowed from his bestiary
# Steven Wallace a.k.a Lethrface ~ adding ability to check for available quests
#===============================================================================
module GameGuy
  #==================================================
  # Begin Config
  # UsePicture ~ true means it'll show pictures in
  #              the quests, false it wont.
  #==================================================
  UsePicture   = false
 
  def self.qreward(id)
    case id
    #==================================================
    # Quest Reward
    # Use when x then return "Reward"
    # x = id, Reward = reward in quotes
    #==================================================
    when 1 then return "100 Gold"
    when 2 then return "3 Potions"
    when 3 then return "Strength Ring"
    end
    return "????"
  end
 
  def self.qpicture(id)
    case id
    #==================================================
    # Quest Picture
    # Use when x then return "picture"
    # x = id, picture = picutre name in quotes
    #==================================================
    when 1 then return "ghost"
    end
    return nil
  end
 
  def self.qname(id)
    case id
    #==================================================
    # Quest Name
    # Use when x then return "name"
    # x = id, name = quest name in quotes
    #==================================================
    when 1 then return "Village Hunt"
    when 2 then return "Pay Tab"
    when 3 then return "Hunting Knife"
    end
    return ""
  end
 
  def self.qlocation(id)
    case id
    #==================================================
    # Quest Location
    # Use when x then return "location"
    # x = id, location = location in quotes
    #==================================================
    when 1 then return "Arton Woods"
    when 2 then return "Eeka"
    when 3 then return "Eeka"
    end
    return "????"
  end
 
  def self.qdescription(id)
    case id
    #==================================================
    # Quest Description
    # Use when x then return "description"
    # x = id, description = quest description in quotes
    #==================================================
    when 1 then return "Extremely LOOOOOOOOOOONNNNNNGGGGGGGG quest description as you can see this goes on for awhile. :P:P:P:P:P"
    when 2 then return "Bring gold to Jarns Defense to pay her tab."
    when 3 then return "Go get Kip a hunting knife from Eeka."
    end
    return ""
  end
 
end

module Quest
 
  def self.add(id)
    $game_party.add_quest(id)
  end
 
  def self.take(id)
    $game_party.take_quest(id)
  end
 
  def self.complete(id)
    $game_party.complete(id)
  end
 
  def self.completed?(id)
    return $game_party.completed?(id)
  end
 
  def self.has?(id)
    return $game_party.has_quest?(id)
  end
 
  def self.check
    return $game_party.check_quests
  end
 
 
end
 
class Game_Party
 
  attr_accessor :quests
  attr_accessor :completed
  attr_accessor :quests_avail
 
  alias gg_quests_lat initialize
  def initialize
    @quests = []
    @completed = []
    gg_quests_lat
    @quests_avail = false
  end
 
  def add_quest(id)
    unless @quests.include?(id)
      @quests.push(id)
    end
  end
 
  def completed?(id)
    return @completed.include?(id)
  end
 
  def complete(id)
    unless @completed.include?(id)
      if @quests.include?(id)
        @completed.push(id)
      end
    end
  end
 
  def has_quest?(id)
    return @quests.include?(id)
  end
 
  def take_quest(id)
    @quests.delete(id)
    @completed.delete(id)
  end
 
  def check_quests
    if @quests == []
      @quests_avail = false
    else
      @quests_avail = true
    end
  end
 
end
class Scene_Quest
  def main
    @quests = []
    for i in $game_party.quests
      @quests.push(GameGuy.qname(i))
    end
    #@map = Spriteset_Map.new
    @quests2 = []
    for i in $game_party.quests
      @quests2.push(i)
    end
    @quests_window = Window_Command.new(160, @quests)
    @quests_window.height = 480
    @quests_window.back_opacity = 255
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    @quests_window.dispose
    @quest_info.dispose if @quest_info != nil
    #@map.dispose
  end
  def update
    @quests_window.update
    if @quests_window.active
      update_quests
      return
    end
    if @quest_info != nil
      update_info
      return
    end
  end
  def update_quests
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new
      return
    end
    if Input.trigger?(Input::C)
      if @quests != [""]
        $game_system.se_play($data_system.decision_se)
        @quest_info = Window_QuestInfo.new(@quests2[@quests_window.index])
        @quest_info.back_opacity = 110
        @quests_window.active = false
        return
      end
    end
  end
  def update_info
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @quests_window.active = true
      @quest_info.dispose
      @quest_info = nil
      return
    end
  end
end
class Window_QuestInfo < Window_Base
  def initialize(quest)
    super(160, 0, 480, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @quest = quest
    refresh
  end
  def refresh
    self.contents.clear
    if GameGuy::UsePicture
      pic = GameGuy.qpicture(@quest)
      bitmap = RPG::Cache.picture(GameGuy.qpicture(@quest)) if pic != nil
      rect = Rect.new(0, 0, bitmap.width, bitmap.height) if pic != nil
      self.contents.blt(480-bitmap.width-32, 0, bitmap, rect) if pic != nil
    end
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 480, 32, "Quest:")
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 32, 480, 32, GameGuy.qname(@quest))
    self.contents.font.color = system_color
    self.contents.draw_text(0, 64, 480, 32, "Reward:")
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 96, 480, 32, GameGuy.qreward(@quest))
    self.contents.font.color = system_color
    self.contents.draw_text(0, 128, 480, 32, "Location:")
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 160, 480, 32, GameGuy.qlocation(@quest))
    self.contents.font.color = system_color
    self.contents.draw_text(0, 192, 480, 32, "Completion:")
    self.contents.font.color = normal_color
    if $game_party.completed.include?(@quest)
      self.contents.font.color = crisis_color
      self.contents.draw_text(0, 224, 480, 32, "Completed")
    else
      self.contents.font.color = normal_color
      self.contents.draw_text(0, 224, 480, 32, "In Progress")
    end
    self.contents.font.color = system_color
    self.contents.draw_text(0, 256, 480, 32, "Description:")
    self.contents.font.color = normal_color
    text = self.contents.slice_text(GameGuy.qdescription(@quest), 460)
    text.each_index {|i|
        self.contents.draw_text(0, 288 + i*32, 460, 32, text[i])}
  end
end
class Bitmap
 
  def slice_text(text, width)
    words = text.split(' ')
    return words if words.size == 1
    result, current_text = [], words.shift
    words.each_index {|i|
        if self.text_size("#{current_text} #{words[i]}").width > width
          result.push(current_text)
          current_text = words[i]
        else
          current_text = "#{current_text} #{words[i]}"
        end
        result.push(current_text) if i >= words.size - 1}
    return result
  end
 
end

Now, you have something to work with, but wait...there's more!

What if you want to add a quest or take away a quest?  By default, the menu is disabled so if you add a quest, you wont be able to access the quest!  Now, I could have simply made it check the quest automatically upon adding/taking the quests but I like to add the OPTION to be able to do this without forcing you to do it (and also because I have some plans that will require this option to be available in my own game).  This allows you to give someone a quest and keep the quest log unavailable until you are ready to do this if you for some reason wish to do so here is a way to handle this type of thing.  Keep in mind there are many ways to handle this (some will require some more editing of the Quest Log script), but this is just something i was playing around with (and probably in no way the easy way lol)

Here is an image of the event that I gave an npc as an example of using the check to see if any quests are available.



As you can see, I added a new script call.  Quest.check will check your quests array to see if there are any quests available and if there aren't any, it will disable or enable your Quest Log command in the menu.  This will further help avoid getting the error that you receive when you have no quests in your quest log.  Remember you want to add a Quest.check command to each of your add or take calls to let the game decide whether the quest log needs to be enabled or disabled and if it is left enabled when you take away all of your quests then you will run the risk of the player getting that nasty error and if its left disabled when you just gave the player a quest, it will not be viewable to the player and thus deemed broken!

PHEW!!! Long winded reply/update over!  Sorry to the original author of the script for working on this without asking for permission but I felt it was long-overdue for an update.  If this has been updated in another post with a totally different version, well...then blame google for not taking me to the new quest log script upon searching for one! :P
I am out of fucks to give.  In fact, I think you owe ME some fucks.  I have insufficient fucks in the fucking account.